xref: /aosp_15_r20/external/llvm/test/Analysis/CostModel/X86/gep.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s  -cost-model -analyze -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
4*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-macosx10.8.0"
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine void @test_geps() {
8*9880d681SAndroid Build Coastguard Worker  ; Cost of should be zero. We expect it to be folded into
9*9880d681SAndroid Build Coastguard Worker  ; the instruction addressing mode.
10*9880d681SAndroid Build Coastguard Worker;CHECK:  cost of 0 for instruction: {{.*}} getelementptr inbounds i8, i8*
11*9880d681SAndroid Build Coastguard Worker  %a0 = getelementptr inbounds i8, i8* undef, i32 0
12*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i16, i16*
13*9880d681SAndroid Build Coastguard Worker  %a1 = getelementptr inbounds i16, i16* undef, i32 0
14*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i32, i32*
15*9880d681SAndroid Build Coastguard Worker  %a2 = getelementptr inbounds i32, i32* undef, i32 0
16*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds i64, i64*
17*9880d681SAndroid Build Coastguard Worker  %a3 = getelementptr inbounds i64, i64* undef, i32 0
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds float, float*
20*9880d681SAndroid Build Coastguard Worker  %a4 = getelementptr inbounds float, float* undef, i32 0
21*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds double, double*
22*9880d681SAndroid Build Coastguard Worker  %a5 = getelementptr inbounds double, double* undef, i32 0
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker ; Vector geps should also have zero cost.
25*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds <4 x i8>, <4 x i8>*
26*9880d681SAndroid Build Coastguard Worker  %a7 = getelementptr inbounds <4 x i8>, <4 x i8>* undef, i32 0
27*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds <4 x i16>, <4 x i16>*
28*9880d681SAndroid Build Coastguard Worker  %a8 = getelementptr inbounds <4 x i16>, <4 x i16>* undef, i32 0
29*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds <4 x i32>, <4 x i32>*
30*9880d681SAndroid Build Coastguard Worker  %a9 = getelementptr inbounds <4 x i32>, <4 x i32>* undef, i32 0
31*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds <4 x i64>, <4 x i64>*
32*9880d681SAndroid Build Coastguard Worker  %a10 = getelementptr inbounds <4 x i64>, <4 x i64>* undef, i32 0
33*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds <4 x float>, <4 x float>*
34*9880d681SAndroid Build Coastguard Worker  %a11 = getelementptr inbounds <4 x float>, <4 x float>* undef, i32 0
35*9880d681SAndroid Build Coastguard Worker;CHECK: cost of 0 for instruction: {{.*}} getelementptr inbounds <4 x double>, <4 x double>*
36*9880d681SAndroid Build Coastguard Worker  %a12 = getelementptr inbounds <4 x double>, <4 x double>* undef, i32 0
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker  ret void
40*9880d681SAndroid Build Coastguard Worker}
41