summaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/GlobalISel/select-memop-scalar.mir
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen/X86/GlobalISel/select-memop-scalar.mir')
-rw-r--r--test/CodeGen/X86/GlobalISel/select-memop-scalar.mir116
1 files changed, 110 insertions, 6 deletions
diff --git a/test/CodeGen/X86/GlobalISel/select-memop-scalar.mir b/test/CodeGen/X86/GlobalISel/select-memop-scalar.mir
index 6d03d7525d20..de79aac9f300 100644
--- a/test/CodeGen/X86/GlobalISel/select-memop-scalar.mir
+++ b/test/CodeGen/X86/GlobalISel/select-memop-scalar.mir
@@ -83,6 +83,20 @@
store i32* %a, i32** %ptr1
ret void
}
+
+ define i32 @test_gep_folding(i32* %arr, i32 %val) {
+ %arrayidx = getelementptr i32, i32* %arr, i32 5
+ store i32 %val, i32* %arrayidx
+ %r = load i32, i32* %arrayidx
+ ret i32 %r
+ }
+
+ define i32 @test_gep_folding_largeGepIndex(i32* %arr, i32 %val) #0 {
+ %arrayidx = getelementptr i32, i32* %arr, i64 57179869180
+ store i32 %val, i32* %arrayidx
+ %r = load i32, i32* %arrayidx
+ ret i32 %r
+ }
...
---
# ALL-LABEL: name: test_load_i8
@@ -340,10 +354,16 @@ name: test_store_float
alignment: 4
legalized: true
regBankSelected: true
+# NO_AVX512F: registers:
+# NO_AVX512F-NEXT: - { id: 0, class: fr32, preferred-register: '' }
+# NO_AVX512F-NEXT: - { id: 1, class: gr64, preferred-register: '' }
+# NO_AVX512F-NEXT: - { id: 2, class: gr32, preferred-register: '' }
+#
+# AVX512ALL: registers:
+# AVX512ALL-NEXT: - { id: 0, class: fr32x, preferred-register: '' }
+# AVX512ALL-NEXT: - { id: 1, class: gr64, preferred-register: '' }
+# AVX512ALL-NEXT: - { id: 2, class: gr32, preferred-register: '' }
registers:
-# ALL: - { id: 0, class: fr32x, preferred-register: '' }
-# ALL: - { id: 1, class: gr64, preferred-register: '' }
-# ALL: - { id: 2, class: gr32, preferred-register: '' }
- { id: 0, class: vecr }
- { id: 1, class: gpr }
- { id: 2, class: gpr }
@@ -399,10 +419,16 @@ name: test_store_double
alignment: 4
legalized: true
regBankSelected: true
+# NO_AVX512F: registers:
+# NO_AVX512F-NEXT: - { id: 0, class: fr64, preferred-register: '' }
+# NO_AVX512F-NEXT: - { id: 1, class: gr64, preferred-register: '' }
+# NO_AVX512F-NEXT: - { id: 2, class: gr64, preferred-register: '' }
+#
+# AVX512ALL: registers:
+# AVX512ALL-NEXT: - { id: 0, class: fr64x, preferred-register: '' }
+# AVX512ALL-NEXT: - { id: 1, class: gr64, preferred-register: '' }
+# AVX512ALL-NEXT: - { id: 2, class: gr64, preferred-register: '' }
registers:
-# ALL: - { id: 0, class: fr64x, preferred-register: '' }
-# ALL: - { id: 1, class: gr64, preferred-register: '' }
-# ALL: - { id: 2, class: gr64, preferred-register: '' }
- { id: 0, class: vecr }
- { id: 1, class: gpr }
- { id: 2, class: gpr }
@@ -498,3 +524,81 @@ body: |
RET 0
...
+---
+name: test_gep_folding
+# ALL-LABEL: name: test_gep_folding
+alignment: 4
+legalized: true
+regBankSelected: true
+# ALL: registers:
+# ALL-NEXT: - { id: 0, class: gr64, preferred-register: '' }
+# ALL-NEXT: - { id: 1, class: gr32, preferred-register: '' }
+# ALL-NEXT: - { id: 2, class: gpr, preferred-register: '' }
+# ALL-NEXT: - { id: 3, class: gpr, preferred-register: '' }
+# ALL-NEXT: - { id: 4, class: gr32, preferred-register: '' }
+registers:
+ - { id: 0, class: gpr }
+ - { id: 1, class: gpr }
+ - { id: 2, class: gpr }
+ - { id: 3, class: gpr }
+ - { id: 4, class: gpr }
+# ALL: %0 = COPY %rdi
+# ALL-NEXT: %1 = COPY %esi
+# ALL-NEXT: MOV32mr %0, 1, _, 20, _, %1 :: (store 4 into %ir.arrayidx)
+# ALL-NEXT: %4 = MOV32rm %0, 1, _, 20, _ :: (load 4 from %ir.arrayidx)
+# ALL-NEXT: %eax = COPY %4
+# ALL-NEXT: RET 0, implicit %eax
+body: |
+ bb.1 (%ir-block.0):
+ liveins: %esi, %rdi
+
+ %0(p0) = COPY %rdi
+ %1(s32) = COPY %esi
+ %2(s64) = G_CONSTANT i64 20
+ %3(p0) = G_GEP %0, %2(s64)
+ G_STORE %1(s32), %3(p0) :: (store 4 into %ir.arrayidx)
+ %4(s32) = G_LOAD %3(p0) :: (load 4 from %ir.arrayidx)
+ %eax = COPY %4(s32)
+ RET 0, implicit %eax
+
+...
+---
+name: test_gep_folding_largeGepIndex
+# ALL-LABEL: name: test_gep_folding_largeGepIndex
+alignment: 4
+legalized: true
+regBankSelected: true
+# ALL: registers:
+# ALL-NEXT: - { id: 0, class: gr64, preferred-register: '' }
+# ALL-NEXT: - { id: 1, class: gr32, preferred-register: '' }
+# ALL-NEXT: - { id: 2, class: gr64_nosp, preferred-register: '' }
+# ALL-NEXT: - { id: 3, class: gr64, preferred-register: '' }
+# ALL-NEXT: - { id: 4, class: gr32, preferred-register: '' }
+registers:
+ - { id: 0, class: gpr }
+ - { id: 1, class: gpr }
+ - { id: 2, class: gpr }
+ - { id: 3, class: gpr }
+ - { id: 4, class: gpr }
+# ALL: %0 = COPY %rdi
+# ALL-NEXT: %1 = COPY %esi
+# ALL-NEXT: %2 = MOV64ri 228719476720
+# ALL-NEXT: %3 = LEA64r %0, 1, %2, 0, _
+# ALL-NEXT: MOV32mr %3, 1, _, 0, _, %1 :: (store 4 into %ir.arrayidx)
+# ALL-NEXT: %4 = MOV32rm %3, 1, _, 0, _ :: (load 4 from %ir.arrayidx)
+# ALL-NEXT: %eax = COPY %4
+# ALL-NEXT: RET 0, implicit %eax
+body: |
+ bb.1 (%ir-block.0):
+ liveins: %esi, %rdi
+
+ %0(p0) = COPY %rdi
+ %1(s32) = COPY %esi
+ %2(s64) = G_CONSTANT i64 228719476720
+ %3(p0) = G_GEP %0, %2(s64)
+ G_STORE %1(s32), %3(p0) :: (store 4 into %ir.arrayidx)
+ %4(s32) = G_LOAD %3(p0) :: (load 4 from %ir.arrayidx)
+ %eax = COPY %4(s32)
+ RET 0, implicit %eax
+
+...