
This is the follow up I mentioned doing in the review of 52b345d. That change introduced an API for performing instruction simplifications following copy propagation (e.g. things like recognizing ORI a0, a1, zero is just a move). As noted in that review, we should be able to perform iterative simplification as we move forward through the block, but weren't because of the code structure. The majority of this code is just deleting the special casing for constant source and destination tracking, and merging the copy handling with the main path. By assumption, the properties of copies (in terms of register reads and writes), must be a subset of general instructions. Once we do that, the iterative bit basically falls out from having the tracking performed for copies which are recognized *after* we forward prior uses.
829 lines
19 KiB
YAML
829 lines
19 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
|
|
# RUN: llc -o - %s -mtriple=riscv64 -run-pass=machine-cp -mcp-use-is-copy-instr | FileCheck %s
|
|
|
|
# Check that instruction simplifications expected to be performed after
|
|
# machine copy propagation are done.
|
|
|
|
---
|
|
name: add1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: add1
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = ADD renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: add2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: add2
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = ADD $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: or1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: or1
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = OR renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: or2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: or2
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = OR $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: xor1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: xor1
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = XOR renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: xor2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: xor2
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = XOR $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
---
|
|
name: xor3
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: xor3
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = XOR renamable $x11, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: addw1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: addw1
|
|
; CHECK: renamable $x10 = ADDIW $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = ADDW renamable $x11, $x12
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: addw2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: addw2
|
|
; CHECK: renamable $x10 = ADDIW $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = ADDW $x12, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sub
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sub
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SUB renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: subw
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: subw
|
|
; CHECK: renamable $x10 = ADDIW $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SUBW renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh1add1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh1add1
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH1ADD $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh1add2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh1add2
|
|
; CHECK: renamable $x10 = SLLI $x12, 1
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH1ADD renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh1add.uw1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh1add.uw1
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH1ADD_UW $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh1add.uw2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh1add.uw2
|
|
; CHECK: renamable $x10 = SLLI_UW $x12, 1
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH1ADD_UW renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh2add1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh2add1
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH2ADD $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh2add2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh2add2
|
|
; CHECK: renamable $x10 = SLLI $x12, 2
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH2ADD renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh2add.uw1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh2add.uw1
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH2ADD_UW $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh2add.uw2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh2add.uw2
|
|
; CHECK: renamable $x10 = SLLI_UW $x12, 2
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH2ADD_UW renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh3add1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh3add1
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH3ADD $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh3add2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh3add2
|
|
; CHECK: renamable $x10 = SLLI $x12, 3
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH3ADD renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh3add.uw1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh3add.uw1
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH3ADD_UW $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sh3add.uw2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sh3add.uw2
|
|
; CHECK: renamable $x10 = SLLI_UW $x12, 3
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SH3ADD_UW renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: andi
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: andi
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = ANDI renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: and1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: and1
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = AND renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: and2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: and2
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = AND $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mul1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mul1
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MUL renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mul2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mul2
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MUL $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mulh1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mulh1
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MULH renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mulh2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mulh2
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MULH $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mulhsu1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mulhsu1
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MULHSU renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mulhsu2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mulhsu2
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MULHSU $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mulhu1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mulhu1
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MULHU renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mulhu2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mulhu2
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MULHU $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mulw1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mulw1
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MULW renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: mulw2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: mulw2
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MULW $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: slli
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: slli
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SLLI renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: srli
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: srli
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SRLI renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: srai
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: srai
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SRAI renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: slliw
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: slliw
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SLLIW renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: srliw
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: srliw
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SRLIW renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sraiw
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sraiw
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SRAIW renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: slli_uw
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: slli_uw
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SLLI_UW renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: ori
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: ori
|
|
; CHECK: renamable $x10 = ADDI $x0, 13
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = ORI renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: xori
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: xori
|
|
; CHECK: renamable $x10 = ADDI $x0, 13
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = XORI renamable $x11, 13
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sltiu1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sltiu1
|
|
; CHECK: renamable $x10 = ADDI $x0, 1
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SLTIU renamable $x11, 2
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sltiu2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sltiu2
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SLTIU renamable $x11, 0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sltu
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sltu
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SLTU renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: add.uw1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: add.uw1
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = ADD_UW renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: add.uw2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: add.uw2
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = ADD_UW $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sext.h
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sext.h
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SEXT_H renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sext.b
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sext.b
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SEXT_B renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: zext.h.rv32
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: zext.h.rv32
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = ZEXT_H_RV32 renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: zext.h.rv64
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: zext.h.rv64
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = ZEXT_H_RV64 renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sll1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sll1
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SLL $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sll2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sll2
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SLL renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sr11
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sr11
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SRL $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sr12
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sr12
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SRL renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sra1
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sra1
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SRA $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sra2
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sra2
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SRA renamable $x11, $x0
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sllw
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sllw
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SLLW $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: srlw
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: srlw
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SRLW $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: sraw
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sraw
|
|
; CHECK: renamable $x10 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = SRAW $x0, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: min
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: min
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MIN renamable $x11, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: minu
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: minu
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MINU renamable $x11, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: max
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: max
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MAX renamable $x11, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: maxu
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: maxu
|
|
; CHECK: renamable $x10 = ADDI $x12, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x10
|
|
renamable $x11 = COPY $x12
|
|
renamable $x10 = MAXU renamable $x11, renamable $x11
|
|
PseudoRET implicit $x10
|
|
...
|
|
---
|
|
name: multipass
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: multipass
|
|
; CHECK: renamable $x9 = ADDI $x0, 0
|
|
; CHECK-NEXT: PseudoRET implicit $x9
|
|
renamable $x11 = COPY $x0
|
|
renamable $x10 = SLLI renamable $x11, 13
|
|
renamable $x9 = SRLI renamable $x10, 13
|
|
PseudoRET implicit $x9
|
|
...
|
|
---
|
|
name: beq
|
|
body: |
|
|
; CHECK-LABEL: name: beq
|
|
; CHECK: bb.0:
|
|
; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $x11 = COPY $x12
|
|
; CHECK-NEXT: BEQ $x12, $x0, %bb.1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.1:
|
|
; CHECK-NEXT: PseudoRET
|
|
bb.0:
|
|
renamable $x11 = COPY $x12
|
|
BEQ $x0, renamable $x11, %bb.1
|
|
bb.1:
|
|
PseudoRET
|
|
...
|
|
---
|
|
name: bne
|
|
body: |
|
|
; CHECK-LABEL: name: bne
|
|
; CHECK: bb.0:
|
|
; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $x11 = COPY $x12
|
|
; CHECK-NEXT: BNE $x12, $x0, %bb.1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.1:
|
|
; CHECK-NEXT: PseudoRET
|
|
bb.0:
|
|
renamable $x11 = COPY $x12
|
|
BNE $x0, renamable $x11, %bb.1
|
|
bb.1:
|
|
PseudoRET
|
|
...
|
|
---
|
|
name: bltu
|
|
body: |
|
|
; CHECK-LABEL: name: bltu
|
|
; CHECK: bb.0:
|
|
; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $x11 = COPY $x12
|
|
; CHECK-NEXT: BNE $x12, $x0, %bb.1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.1:
|
|
; CHECK-NEXT: PseudoRET
|
|
bb.0:
|
|
renamable $x11 = COPY $x12
|
|
BLTU $x0, renamable $x11, %bb.1
|
|
bb.1:
|
|
PseudoRET
|
|
...
|
|
---
|
|
name: bgeu
|
|
body: |
|
|
; CHECK-LABEL: name: bgeu
|
|
; CHECK: bb.0:
|
|
; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: renamable $x11 = COPY $x12
|
|
; CHECK-NEXT: BEQ $x12, $x0, %bb.1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.1:
|
|
; CHECK-NEXT: PseudoRET
|
|
bb.0:
|
|
renamable $x11 = COPY $x12
|
|
BGEU $x0, renamable $x11, %bb.1
|
|
bb.1:
|
|
PseudoRET
|
|
...
|