blob: 58670485d5744988b0552245365ad27ddb077c8d [file] [edit]
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --filter "SLLI|SRAI|ADDI|XOR|ADD|JALR|PseudoCALLReg" --version 5
# The two runs intentionally use the same check prefix: debug instructions
# must not change outlining decisions, calls, or outlined-function numbering.
# `critical` is intentionally too short to outline in both runs;
# the debug operands in a0/a1/a2 exercise candidate liveness.
# RUN: llc -mtriple=riscv32-unknown-elf -run-pass=machine-outliner \
# RUN: -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK
# RUN: llc -mtriple=riscv32-unknown-elf \
# RUN: -run-pass=mir-strip-debug,machine-outliner \
# RUN: -mir-strip-debugify-only=0 -verify-machineinstrs %s -o - | \
# RUN: FileCheck %s --check-prefix=CHECK
--- |
define void @critical() { ret void }
define void @a0() { ret void }
define void @a1() { ret void }
define void @a2() { ret void }
define void @b0() { ret void }
define void @b1() { ret void }
define void @b2() { ret void }
define void @c0() { ret void }
define void @c1() { ret void }
define void @c2() { ret void }
define void @d0() { ret void }
define void @d1() { ret void }
define void @d2() { ret void }
...
---
name: critical
tracksRegLiveness: true
body: |
; CHECK-LABEL: name: critical
; CHECK: bb.0:
; CHECK: bb.1:
bb.0:
liveins: $x7, $x15
DBG_VALUE $x15, $noreg
$x12 = DIV $x7, $x15
bb.1:
PseudoRET
...
---
name: a0
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: a0
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_3, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 1
$x11 = SLLI $x10, 10
DBG_VALUE $x5, $noreg
$x10 = SRAI $x11, 21
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 10
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 1
PseudoRET implicit $x10
...
---
name: a1
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: a1
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_3, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 2
$x11 = SLLI $x10, 10
DBG_VALUE $x5, $noreg
$x10 = SRAI $x11, 21
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 10
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 2
PseudoRET implicit $x10
...
---
name: a2
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: a2
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_3, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 3
$x11 = SLLI $x10, 10
DBG_VALUE $x5, $noreg
$x10 = SRAI $x11, 21
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 10
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 3
PseudoRET implicit $x10
...
---
name: b0
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: b0
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_0, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 4
$x11 = SLLI $x10, 21
$x10 = SRAI $x11, 21
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 21
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 4
PseudoRET implicit $x10
...
---
name: b1
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: b1
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_0, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 5
$x11 = SLLI $x10, 21
$x10 = SRAI $x11, 21
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 21
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 5
PseudoRET implicit $x10
...
---
name: b2
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: b2
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_0, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 6
$x11 = SLLI $x10, 21
$x10 = SRAI $x11, 21
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 21
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 6
PseudoRET implicit $x10
...
---
name: c0
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: c0
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_1, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 7
$x11 = SLLI $x10, 3
$x10 = SRAI $x11, 3
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 3
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 7
PseudoRET implicit $x10
...
---
name: c1
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: c1
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_1, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 8
$x11 = SLLI $x10, 3
$x10 = SRAI $x11, 3
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 3
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 8
PseudoRET implicit $x10
...
---
name: c2
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: c2
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_1, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 9
$x11 = SLLI $x10, 3
$x10 = SRAI $x11, 3
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 3
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 9
PseudoRET implicit $x10
...
---
name: d0
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: d0
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_2, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 10
$x11 = SLLI $x10, 18
$x10 = SRAI $x11, 18
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 18
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 10
PseudoRET implicit $x10
...
---
name: d1
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: d1
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_2, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 11
$x11 = SLLI $x10, 18
$x10 = SRAI $x11, 18
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 18
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 11
PseudoRET implicit $x10
...
---
name: d2
tracksRegLiveness: true
body: |
bb.0:
liveins: $x10
; CHECK-LABEL: name: d2
; CHECK: $x5 = PseudoCALLReg target-flags(riscv-call) @OUTLINED_FUNCTION_2, implicit-def $x5, implicit-def $x10, implicit-def $x11, implicit-def $x12, implicit-def $x13, implicit-def $x14, implicit $x10
; CHECK-NEXT: $x0 = ADDI $x0, 12
$x11 = SLLI $x10, 18
$x10 = SRAI $x11, 18
$x11 = SRAI $x11, 31
$x12 = ADDI $x10, 18
$x13 = XOR $x12, $x11
$x14 = ADD $x13, $x10
$x0 = ADDI $x0, 12
PseudoRET implicit $x10
...