[PowerPC] Recommit r314244 with refactoring and off by default
[llvm-core.git] / test / CodeGen / AArch64 / GlobalISel / translate-gep.ll
blob865315bbe0a31001439aa4fbe09dc12b778d44fc
1 ; RUN: llc -mtriple=aarch64-linux-gnu -O0 -global-isel -stop-after=irtranslator -o - %s | FileCheck %s
3 %type = type [4 x {i8, i32}]
5 define %type* @first_offset_const(%type* %addr) {
6 ; CHECK-LABEL: name: first_offset_const
7 ; CHECK: [[BASE:%[0-9]+]]:_(p0) = COPY %x0
8 ; CHECK: [[OFFSET:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
9 ; CHECK: [[RES:%[0-9]+]]:_(p0) = G_GEP [[BASE]], [[OFFSET]](s64)
10 ; CHECK: %x0 = COPY [[RES]](p0)
12   %res = getelementptr %type, %type* %addr, i32 1
13   ret %type* %res
16 define %type* @first_offset_trivial(%type* %addr) {
17 ; CHECK-LABEL: name: first_offset_trivial
18 ; CHECK: [[BASE:%[0-9]+]]:_(p0) = COPY %x0
19 ; CHECK: [[TRIVIAL:%[0-9]+]]:_(p0) = COPY [[BASE]](p0)
20 ; CHECK: %x0 = COPY [[TRIVIAL]](p0)
22   %res = getelementptr %type, %type* %addr, i32 0
23   ret %type* %res
26 define %type* @first_offset_variable(%type* %addr, i64 %idx) {
27 ; CHECK-LABEL: name: first_offset_variable
28 ; CHECK: [[BASE:%[0-9]+]]:_(p0) = COPY %x0
29 ; CHECK: [[IDX:%[0-9]+]]:_(s64) = COPY %x1
30 ; CHECK: [[SIZE:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
31 ; CHECK: [[OFFSET:%[0-9]+]]:_(s64) = G_MUL [[SIZE]], [[IDX]]
32 ; CHECK: [[STEP0:%[0-9]+]]:_(p0) = G_GEP [[BASE]], [[OFFSET]](s64)
33 ; CHECK: [[RES:%[0-9]+]]:_(p0) = COPY [[STEP0]](p0)
34 ; CHECK: %x0 = COPY [[RES]](p0)
36   %res = getelementptr %type, %type* %addr, i64 %idx
37   ret %type* %res
40 define %type* @first_offset_ext(%type* %addr, i32 %idx) {
41 ; CHECK-LABEL: name: first_offset_ext
42 ; CHECK: [[BASE:%[0-9]+]]:_(p0) = COPY %x0
43 ; CHECK: [[IDX32:%[0-9]+]]:_(s32) = COPY %w1
44 ; CHECK: [[SIZE:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
45 ; CHECK: [[IDX64:%[0-9]+]]:_(s64) = G_SEXT [[IDX32]](s32)
46 ; CHECK: [[OFFSET:%[0-9]+]]:_(s64) = G_MUL [[SIZE]], [[IDX64]]
47 ; CHECK: [[STEP0:%[0-9]+]]:_(p0) = G_GEP [[BASE]], [[OFFSET]](s64)
48 ; CHECK: [[RES:%[0-9]+]]:_(p0) = COPY [[STEP0]](p0)
49 ; CHECK: %x0 = COPY [[RES]](p0)
51   %res = getelementptr %type, %type* %addr, i32 %idx
52   ret %type* %res
55 %type1 = type [4 x [4 x i32]]
56 define i32* @const_then_var(%type1* %addr, i64 %idx) {
57 ; CHECK-LABEL: name: const_then_var
58 ; CHECK: [[BASE:%[0-9]+]]:_(p0) = COPY %x0
59 ; CHECK: [[IDX:%[0-9]+]]:_(s64) = COPY %x1
60 ; CHECK: [[OFFSET1:%[0-9]+]]:_(s64) = G_CONSTANT i64 272
61 ; CHECK: [[SIZE:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
62 ; CHECK: [[BASE1:%[0-9]+]]:_(p0) = G_GEP [[BASE]], [[OFFSET1]](s64)
63 ; CHECK: [[OFFSET2:%[0-9]+]]:_(s64) = G_MUL [[SIZE]], [[IDX]]
64 ; CHECK: [[BASE2:%[0-9]+]]:_(p0) = G_GEP [[BASE1]], [[OFFSET2]](s64)
65 ; CHECK: [[RES:%[0-9]+]]:_(p0) = COPY [[BASE2]](p0)
66 ; CHECK: %x0 = COPY [[RES]](p0)
68   %res = getelementptr %type1, %type1* %addr, i32 4, i32 1, i64 %idx
69   ret i32* %res
72 define i32* @var_then_const(%type1* %addr, i64 %idx) {
73 ; CHECK-LABEL: name: var_then_const
74 ; CHECK: [[BASE:%[0-9]+]]:_(p0) = COPY %x0
75 ; CHECK: [[IDX:%[0-9]+]]:_(s64) = COPY %x1
76 ; CHECK: [[SIZE:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
77 ; CHECK: [[OFFSET2:%[0-9]+]]:_(s64) = G_CONSTANT i64 40
78 ; CHECK: [[OFFSET1:%[0-9]+]]:_(s64) = G_MUL [[SIZE]], [[IDX]]
79 ; CHECK: [[BASE1:%[0-9]+]]:_(p0) = G_GEP [[BASE]], [[OFFSET1]](s64)
80 ; CHECK: [[BASE2:%[0-9]+]]:_(p0) = G_GEP [[BASE1]], [[OFFSET2]](s64)
81 ; CHECK: %x0 = COPY [[BASE2]](p0)
83   %res = getelementptr %type1, %type1* %addr, i64 %idx, i32 2, i32 2
84   ret i32* %res