xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/getelementptr.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -march=x86
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -march=x86-64
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O2 -march=x86
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O2 -march=x86-64
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; Test big index trunc to pointer size:
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdefine i8* @test_trunc65(i8* %ptr) nounwind {
10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_trunc65
11*9880d681SAndroid Build Coastguard Worker; CHECK: 3
12*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i65 18446744073709551619 ; 2^64 + 3
13*9880d681SAndroid Build Coastguard Worker  ret i8* %d
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdefine i8* @test_trunc128(i8* %ptr) nounwind {
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_trunc128
18*9880d681SAndroid Build Coastguard Worker; CHECK: 5
19*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i128 18446744073709551621 ; 2^64 + 5
20*9880d681SAndroid Build Coastguard Worker  ret i8* %d
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine i8* @test_trunc160(i8* %ptr) nounwind {
24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_trunc160
25*9880d681SAndroid Build Coastguard Worker; CHECK: 8
26*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i160 18446744073709551624 ; 2^64 + 8
27*9880d681SAndroid Build Coastguard Worker  ret i8* %d
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine i8* @test_trunc256(i8* %ptr) nounwind {
31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_trunc256
32*9880d681SAndroid Build Coastguard Worker; CHECK: 13
33*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i256 18446744073709551629 ; 2^64 + 13
34*9880d681SAndroid Build Coastguard Worker  ret i8* %d
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdefine i8* @test_trunc2048(i8* %ptr) nounwind {
38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_trunc2048
39*9880d681SAndroid Build Coastguard Worker; CHECK: 21
40*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i2048 18446744073709551637 ; 2^64 + 21
41*9880d681SAndroid Build Coastguard Worker  ret i8* %d
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; Test small index sext to pointer size
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerdefine i8* @test_sext3(i8* %ptr) nounwind {
48*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext3
49*9880d681SAndroid Build Coastguard Worker; CHECK: -3
50*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i3 -3
51*9880d681SAndroid Build Coastguard Worker  ret i8* %d
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine i8* @test_sext5(i8* %ptr) nounwind {
55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext5
56*9880d681SAndroid Build Coastguard Worker; CHECK: -5
57*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i5 -5
58*9880d681SAndroid Build Coastguard Worker  ret i8* %d
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine i8* @test_sext8(i8* %ptr) nounwind {
62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext8
63*9880d681SAndroid Build Coastguard Worker; CHECK: -8
64*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i8 -8
65*9880d681SAndroid Build Coastguard Worker  ret i8* %d
66*9880d681SAndroid Build Coastguard Worker}
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Workerdefine i8* @test_sext13(i8* %ptr) nounwind {
69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext13
70*9880d681SAndroid Build Coastguard Worker; CHECK: -13
71*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i8 -13
72*9880d681SAndroid Build Coastguard Worker  ret i8* %d
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine i8* @test_sext16(i8* %ptr) nounwind {
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext16
77*9880d681SAndroid Build Coastguard Worker; CHECK: -21
78*9880d681SAndroid Build Coastguard Worker  %d = getelementptr i8, i8* %ptr, i8 -21
79*9880d681SAndroid Build Coastguard Worker  ret i8* %d
80*9880d681SAndroid Build Coastguard Worker}
81