1 # RUN: llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s | FileCheck %s
2 # This test ensures that the MIR parser parses the machine memory operands
7 define i32 @test(i32* %a) {
14 define void @test2(i32* %"a value") {
16 %b = load i32, i32* %"a value"
18 store i32 %c, i32* %"a value"
22 define i32 @volatile_inc(i32* %x) {
24 %0 = load volatile i32, i32* %x
26 store volatile i32 %1, i32* %x
30 define void @non_temporal_store(i32* %a, i32 %b) {
32 store i32 %b, i32* %a, align 16, !nontemporal !0
38 define i32 @invariant_load(i32* %x) {
40 %v = load i32, i32* %x, !invariant.load !1
46 define void @memory_offset(<8 x float>* %vec) {
48 %v = load <8 x float>, <8 x float>* %vec
49 %v2 = insertelement <8 x float> %v, float 0.0, i32 4
50 store <8 x float> %v2, <8 x float>* %vec
57 tracksRegLiveness: true
65 # CHECK: %eax = MOV32rm %rdi, 1, _, 0, _ :: (load 4 from %ir.a)
66 # CHECK-NEXT: MOV32mi killed %rdi, 1, _, 0, _, 42 :: (store 4 into %ir.a)
67 - '%eax = MOV32rm %rdi, 1, _, 0, _ :: (load 4 from %ir.a)'
68 - 'MOV32mi killed %rdi, 1, _, 0, _, 42 :: (store 4 into %ir.a)'
73 tracksRegLiveness: true
81 # CHECK: INC32m killed %rdi, 1, _, 0, _, implicit-def dead %eflags :: (store 4 into %ir."a value"), (load 4 from %ir."a value")
82 - 'INC32m killed %rdi, 1, _, 0, _, implicit-def dead %eflags :: (store 4 into %ir."a value"), (load 4 from %ir."a value")'
87 tracksRegLiveness: true
95 # CHECK: name: volatile_inc
96 # CHECK: %eax = MOV32rm %rdi, 1, _, 0, _ :: (volatile load 4 from %ir.x)
97 # CHECK: MOV32mr killed %rdi, 1, _, 0, _, %eax :: (volatile store 4 into %ir.x)
98 - '%eax = MOV32rm %rdi, 1, _, 0, _ :: (volatile load 4 from %ir.x)'
99 - '%eax = INC32r killed %eax, implicit-def dead %eflags'
100 - 'MOV32mr killed %rdi, 1, _, 0, _, %eax :: (volatile store 4 into %ir.x)'
104 name: non_temporal_store
105 tracksRegLiveness: true
112 liveins: [ '%esi', '%rdi' ]
114 # CHECK: name: non_temporal_store
115 # CHECK: MOVNTImr killed %rdi, 1, _, 0, _, killed %esi :: (non-temporal store 4 into %ir.a)
116 - 'MOVNTImr killed %rdi, 1, _, 0, _, killed %esi :: (non-temporal store 4 into %ir.a)'
121 tracksRegLiveness: true
129 # CHECK: name: invariant_load
130 # CHECK: %eax = MOV32rm killed %rdi, 1, _, 0, _ :: (invariant load 4 from %ir.x)
131 - '%eax = MOV32rm killed %rdi, 1, _, 0, _ :: (invariant load 4 from %ir.x)'
136 tracksRegLiveness: true
144 # CHECK: name: memory_offset
145 # CHECK: %xmm0 = MOVAPSrm %rdi, 1, _, 0, _ :: (load 16 from %ir.vec)
146 # CHECK-NEXT: %xmm1 = MOVAPSrm %rdi, 1, _, 16, _ :: (load 16 from %ir.vec + 16)
147 # CHECK: MOVAPSmr %rdi, 1, _, 0, _, killed %xmm0 :: (store 16 into %ir.vec)
148 # CHECK-NEXT: MOVAPSmr killed %rdi, 1, _, 16, _, killed %xmm1 :: (store 16 into %ir.vec + 16)
149 - '%xmm0 = MOVAPSrm %rdi, 1, _, 0, _ :: (load 16 from %ir.vec)'
150 - '%xmm1 = MOVAPSrm %rdi, 1, _, 16, _ :: (load 16 from %ir.vec + 16)'
152 - '%xmm1 = MOVSSrr killed %xmm1, killed %xmm2'
153 - 'MOVAPSmr %rdi, 1, _, 0, _, killed %xmm0 :: (store 16 into %ir.vec)'
154 - 'MOVAPSmr killed %rdi, 1, _, 16, _, killed %xmm1 :: (store 16 into %ir.vec + 16)'