1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
# RUN: llc -run-pass x86-fixup-bw-insts -mtriple=x86_64-- -o - %s | FileCheck %s
# Verify that we correctly deal with the flag edge cases when replacing
# copies by bigger copies, which is a pretty unusual transform.
--- |
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
define i8 @test_movb_killed(i8 %a0) {
ret i8 %a0
}
define i8 @test_movb_impuse(i8 %a0) {
ret i8 %a0
}
define i8 @test_movb_impdef_gr64(i8 %a0) {
ret i8 %a0
}
define i8 @test_movb_impdef_gr32(i8 %a0) {
ret i8 %a0
}
define i8 @test_movb_impdef_gr16(i8 %a0) {
ret i8 %a0
}
define i16 @test_movw_impdef_gr32(i16 %a0) {
ret i16 %a0
}
define i16 @test_movw_impdef_gr64(i16 %a0) {
ret i16 %a0
}
...
---
name: test_movb_killed
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
body: |
bb.0 (%ir-block.0):
liveins: $edi
; CHECK: $eax = MOV32rr undef $edi, implicit $dil
$al = MOV8rr killed $dil
RET64 killed $al
...
---
name: test_movb_impuse
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
body: |
bb.0 (%ir-block.0):
liveins: $edi
; CHECK: $eax = MOV32rr undef $edi, implicit $dil
$al = MOV8rr $dil, implicit $edi
RET64 killed $al
...
---
name: test_movb_impdef_gr64
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
body: |
bb.0 (%ir-block.0):
liveins: $edi
; CHECK: $eax = MOV32rr undef $edi, implicit $dil, implicit-def $rax
$al = MOV8rr $dil, implicit-def $rax
RET64 killed $al
...
---
name: test_movb_impdef_gr32
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
body: |
bb.0 (%ir-block.0):
liveins: $edi
; CHECK: $eax = MOV32rr undef $edi, implicit $dil
$al = MOV8rr $dil, implicit-def $eax
RET64 killed $al
...
---
name: test_movb_impdef_gr16
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
body: |
bb.0 (%ir-block.0):
liveins: $edi
; CHECK: $eax = MOV32rr undef $edi, implicit $dil
$al = MOV8rr $dil, implicit-def $ax
RET64 killed $al
...
---
name: test_movw_impdef_gr32
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
body: |
bb.0 (%ir-block.0):
liveins: $edi
; CHECK: $eax = MOV32rr undef $edi, implicit $di
$ax = MOV16rr $di, implicit-def $eax
RET64 killed $ax
...
---
name: test_movw_impdef_gr64
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
body: |
bb.0 (%ir-block.0):
liveins: $edi
; CHECK: $eax = MOV32rr undef $edi, implicit $di, implicit-def $rax
$ax = MOV16rr $di, implicit-def $rax
RET64 killed $ax
...
|