Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/RISCV/add-sub-combiner.mir
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||||
# RUN: llc -march=riscv64 -run-pass riscv-make-compressible %s -o - 2>&1 | FileCheck %s | # RUN: llc -march=riscv64 -run-pass riscv-addsub-comb %s -o - 2>&1 | FileCheck %s | ||||
--- | --- | ||||
name: adds-combination | name: adds-combination | ||||
tracksRegLiveness: true | tracksRegLiveness: true | ||||
body: | | body: | | ||||
bb.0: | bb.0: | ||||
liveins: $x6, $x13 | liveins: $x6, $x13 | ||||
; CHECK-LABEL: name: adds-combination | ; CHECK-LABEL: name: adds-combination | ||||
; CHECK: liveins: $x6, $x13 | ; CHECK: liveins: $x6, $x13 | ||||
; CHECK-NEXT: {{ $}} | ; CHECK-NEXT: {{ $}} | ||||
; CHECK-NEXT: renamable $x13 = ADDI killed renamable $x13, 6 | |||||
; CHECK-NEXT: renamable $x10 = ADDI $x0, 7 | ; CHECK-NEXT: renamable $x10 = ADDI $x0, 7 | ||||
; CHECK-NEXT: renamable $x13 = nuw ADDI killed renamable $x13, 1 | ; CHECK-NEXT: renamable $x13 = nuw ADDI killed renamable $x13, 7 | ||||
renamable $x13 = ADDI killed renamable $x13, 6 | renamable $x13 = ADDI killed renamable $x13, 6 | ||||
renamable $x10 = ADDI $x0, 7 | renamable $x10 = ADDI $x0, 7 | ||||
renamable $x13 = nuw ADDI killed renamable $x13, 1 | renamable $x13 = nuw ADDI killed renamable $x13, 1 | ||||
... | ... | ||||
--- | --- | ||||
name: redundant-adds | name: redundant-adds | ||||
tracksRegLiveness: true | tracksRegLiveness: true | ||||
body: | | body: | | ||||
bb.0: | bb.0: | ||||
liveins: $x6, $x13 | liveins: $x6, $x13 | ||||
; CHECK-LABEL: name: redundant-adds | ; CHECK-LABEL: name: redundant-adds | ||||
; CHECK: liveins: $x6, $x13 | ; CHECK: liveins: $x6, $x13 | ||||
; CHECK-NEXT: {{ $}} | ; CHECK-NEXT: {{ $}} | ||||
; CHECK-NEXT: renamable $x13 = ADDI killed renamable $x13, -1 | |||||
; CHECK-NEXT: renamable $x10 = ADDI $x0, 7 | ; CHECK-NEXT: renamable $x10 = ADDI $x0, 7 | ||||
; CHECK-NEXT: renamable $x13 = nuw ADDI killed renamable $x13, 1 | |||||
; CHECK-NEXT: PseudoRET implicit killed $x10 | ; CHECK-NEXT: PseudoRET implicit killed $x10 | ||||
renamable $x13 = ADDI killed renamable $x13, -1 | renamable $x13 = ADDI killed renamable $x13, -1 | ||||
renamable $x10 = ADDI $x0, 7 | renamable $x10 = ADDI $x0, 7 | ||||
renamable $x13 = nuw ADDI killed renamable $x13, 1 | renamable $x13 = nuw ADDI killed renamable $x13, 1 | ||||
PseudoRET implicit killed $x10 | PseudoRET implicit killed $x10 | ||||
... | ... | ||||
--- | --- | ||||
name: adds-combination-chain | name: adds-combination-chain | ||||
tracksRegLiveness: true | tracksRegLiveness: true | ||||
body: | | body: | | ||||
bb.0: | bb.0: | ||||
liveins: $x6, $x13 | liveins: $x6, $x13 | ||||
; CHECK-LABEL: name: adds-combination-chain | ; CHECK-LABEL: name: adds-combination-chain | ||||
; CHECK: liveins: $x6, $x13 | ; CHECK: liveins: $x6, $x13 | ||||
; CHECK-NEXT: {{ $}} | ; CHECK-NEXT: {{ $}} | ||||
; CHECK-NEXT: renamable $x13 = ADDIW killed renamable $x13, 6 | |||||
; CHECK-NEXT: renamable $x10 = ADDIW $x0, 7 | ; CHECK-NEXT: renamable $x10 = ADDIW $x0, 7 | ||||
; CHECK-NEXT: renamable $x13 = nuw ADDIW killed renamable $x13, 1 | ; CHECK-NEXT: renamable $x13 = nuw ADDIW killed renamable $x13, 14 | ||||
; CHECK-NEXT: renamable $x13 = nuw ADDIW killed renamable $x13, 7 | |||||
renamable $x13 = ADDIW killed renamable $x13, 6 | renamable $x13 = ADDIW killed renamable $x13, 6 | ||||
renamable $x10 = ADDIW $x0, 7 | renamable $x10 = ADDIW $x0, 7 | ||||
renamable $x13 = nuw ADDIW killed renamable $x13, 1 | renamable $x13 = nuw ADDIW killed renamable $x13, 1 | ||||
renamable $x13 = nuw ADDIW killed renamable $x13, 7 | renamable $x13 = nuw ADDIW killed renamable $x13, 7 | ||||
... | ... | ||||
--- | --- | ||||
name: add-sub-combination | name: add-sub-combination | ||||
tracksRegLiveness: true | tracksRegLiveness: true | ||||
body: | | body: | | ||||
bb.0: | bb.0: | ||||
liveins: $x6, $x13 | liveins: $x6, $x13 | ||||
; CHECK-LABEL: name: add-sub-combination | ; CHECK-LABEL: name: add-sub-combination | ||||
; CHECK: liveins: $x6, $x13 | ; CHECK: liveins: $x6, $x13 | ||||
; CHECK-NEXT: {{ $}} | ; CHECK-NEXT: {{ $}} | ||||
; CHECK-NEXT: renamable $x13 = ADD killed renamable $x13, $x0 | |||||
; CHECK-NEXT: renamable $x10 = ADDIW $x0, 7 | ; CHECK-NEXT: renamable $x10 = ADDIW $x0, 7 | ||||
; CHECK-NEXT: renamable $x13 = SUB killed renamable $x13, $x0 | |||||
renamable $x13 = ADD killed renamable $x13, $x0 | renamable $x13 = ADD killed renamable $x13, $x0 | ||||
renamable $x10 = ADDIW $x0, 7 | renamable $x10 = ADDIW $x0, 7 | ||||
renamable $x13 = SUB killed renamable $x13, $x0 | renamable $x13 = SUB killed renamable $x13, $x0 | ||||
... | ... | ||||
--- | --- | ||||
name: rewrite-register | name: rewrite-register | ||||
tracksRegLiveness: true | tracksRegLiveness: true | ||||
body: | | body: | | ||||
bb.0: | bb.0: | ||||
liveins: $x6, $x13 | liveins: $x6, $x13 | ||||
; CHECK-LABEL: name: rewrite-register | ; CHECK-LABEL: name: rewrite-register | ||||
; CHECK: liveins: $x6, $x13 | ; CHECK: liveins: $x6, $x13 | ||||
; CHECK-NEXT: {{ $}} | ; CHECK-NEXT: {{ $}} | ||||
; CHECK-NEXT: renamable $x13 = ADDI killed renamable $x13, 6 | |||||
; CHECK-NEXT: renamable $x13 = ADDI $x0, 7 | ; CHECK-NEXT: renamable $x13 = ADDI $x0, 7 | ||||
; CHECK-NEXT: renamable $x13 = nuw ADDI killed renamable $x13, 1 | ; CHECK-NEXT: renamable $x13 = nuw ADDI killed renamable $x13, 1 | ||||
renamable $x13 = ADDI killed renamable $x13, 6 | renamable $x13 = ADDI killed renamable $x13, 6 | ||||
renamable $x13 = ADDI $x0, 7 | renamable $x13 = ADDI $x0, 7 | ||||
renamable $x13 = nuw ADDI killed renamable $x13, 1 | renamable $x13 = nuw ADDI killed renamable $x13, 1 | ||||
... | ... | ||||
--- | --- | ||||
name: different-registers-chain | name: different-registers-chain | ||||
tracksRegLiveness: true | tracksRegLiveness: true | ||||
body: | | body: | | ||||
bb.0: | bb.0: | ||||
liveins: $x6, $x13 | liveins: $x6, $x13 | ||||
; Negative test | |||||
; CHECK-LABEL: name: different-registers-chain | ; CHECK-LABEL: name: different-registers-chain | ||||
; CHECK: liveins: $x6, $x13 | ; CHECK: liveins: $x6, $x13 | ||||
; CHECK-NEXT: {{ $}} | ; CHECK-NEXT: {{ $}} | ||||
; CHECK-NEXT: renamable $x10 = ADDI $x0, 7 | ; CHECK-NEXT: renamable $x10 = ADDI $x0, 7 | ||||
; CHECK-NEXT: renamable $x13 = ADDI killed renamable $x10, 6 | ; CHECK-NEXT: renamable $x13 = ADDI killed renamable $x10, 6 | ||||
; CHECK-NEXT: renamable $x13 = nuw ADDI killed renamable $x13, 1 | ; CHECK-NEXT: renamable $x13 = nuw ADDI killed renamable $x13, 1 | ||||
renamable $x10 = ADDI $x0, 7 | renamable $x10 = ADDI $x0, 7 | ||||
renamable $x13 = ADDI killed renamable $x10, 6 | renamable $x13 = ADDI killed renamable $x10, 6 | ||||
renamable $x13 = nuw ADDI killed renamable $x13, 1 | renamable $x13 = nuw ADDI killed renamable $x13, 1 | ||||
... | ... | ||||
--- | --- | ||||
name: add-sub-different-registers | name: add-sub-different-registers | ||||
tracksRegLiveness: true | tracksRegLiveness: true | ||||
body: | | body: | | ||||
bb.0: | bb.0: | ||||
liveins: $x6, $x13 | liveins: $x6, $x13 | ||||
; Negative test | |||||
; CHECK-LABEL: name: add-sub-different-registers | ; CHECK-LABEL: name: add-sub-different-registers | ||||
; CHECK: liveins: $x6, $x13 | ; CHECK: liveins: $x6, $x13 | ||||
; CHECK-NEXT: {{ $}} | ; CHECK-NEXT: {{ $}} | ||||
; CHECK-NEXT: renamable $x13 = ADD killed renamable $x13, $x0 | ; CHECK-NEXT: renamable $x13 = ADD killed renamable $x13, $x0 | ||||
; CHECK-NEXT: renamable $x10 = ADDIW $x0, 7 | ; CHECK-NEXT: renamable $x10 = ADDIW $x0, 7 | ||||
; CHECK-NEXT: renamable $x13 = SUB killed renamable $x13, $x10 | ; CHECK-NEXT: renamable $x13 = SUB killed renamable $x13, $x10 | ||||
renamable $x13 = ADD killed renamable $x13, $x0 | renamable $x13 = ADD killed renamable $x13, $x0 | ||||
renamable $x10 = ADDIW $x0, 7 | renamable $x10 = ADDIW $x0, 7 | ||||
renamable $x13 = SUB killed renamable $x13, $x10 | renamable $x13 = SUB killed renamable $x13, $x10 | ||||
... | ... | ||||
--- | --- | ||||
name: not-redundant-adds | name: not-redundant-adds | ||||
tracksRegLiveness: true | tracksRegLiveness: true | ||||
body: | | body: | | ||||
bb.0: | bb.0: | ||||
liveins: $x6, $x13 | liveins: $x6, $x13 | ||||
; Negative test | |||||
; CHECK-LABEL: name: not-redundant-adds | ; CHECK-LABEL: name: not-redundant-adds | ||||
; CHECK: liveins: $x6, $x13 | ; CHECK: liveins: $x6, $x13 | ||||
; CHECK-NEXT: {{ $}} | ; CHECK-NEXT: {{ $}} | ||||
; CHECK-NEXT: renamable $x13 = ADDI killed renamable $x13, -1 | ; CHECK-NEXT: renamable $x13 = ADDI killed renamable $x13, -1 | ||||
; CHECK-NEXT: renamable $x10 = ADDI $x13, 7 | ; CHECK-NEXT: renamable $x10 = ADDI $x13, 7 | ||||
; CHECK-NEXT: renamable $x13 = nuw ADDI killed renamable $x13, 1 | ; CHECK-NEXT: renamable $x13 = nuw ADDI killed renamable $x13, 1 | ||||
; CHECK-NEXT: PseudoRET implicit killed $x10 | ; CHECK-NEXT: PseudoRET implicit killed $x10 | ||||
renamable $x13 = ADDI killed renamable $x13, -1 | renamable $x13 = ADDI killed renamable $x13, -1 | ||||
renamable $x10 = ADDI $x13, 7 | renamable $x10 = ADDI $x13, 7 | ||||
renamable $x13 = nuw ADDI killed renamable $x13, 1 | renamable $x13 = nuw ADDI killed renamable $x13, 1 | ||||
PseudoRET implicit killed $x10 | PseudoRET implicit killed $x10 |