xref: /llvm-project/llvm/test/Analysis/CostModel/X86/gep.ll (revision 68c50b111d74afb9489cf97770fa917d0a1c7f77)
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2; RUN: opt < %s -mtriple=x86_64-apple-macosx10.8.0 -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=throughput   -mcpu=corei7-avx | FileCheck %s --check-prefix=THRU
3; RUN: opt < %s -mtriple=x86_64-apple-macosx10.8.0 -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency      -mcpu=corei7-avx | FileCheck %s --check-prefix=LATE
4; RUN: opt < %s -mtriple=x86_64-apple-macosx10.8.0 -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size    -mcpu=corei7-avx | FileCheck %s --check-prefix=SIZE
5; RUN: opt < %s -mtriple=x86_64-apple-macosx10.8.0 -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mcpu=corei7-avx | FileCheck %s --check-prefix=SIZE_LATE
6
7define void @test_geps() {
8; THRU-LABEL: 'test_geps'
9; THRU-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %giant_gep0 = getelementptr inbounds i8, ptr undef, i64 9223372036854775807
10; THRU-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %giant_gep1 = getelementptr inbounds i8, ptr undef, i128 295147905179352825855
11; THRU-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
12;
13; LATE-LABEL: 'test_geps'
14; LATE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %giant_gep0 = getelementptr inbounds i8, ptr undef, i64 9223372036854775807
15; LATE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %giant_gep1 = getelementptr inbounds i8, ptr undef, i128 295147905179352825855
16; LATE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret void
17;
18; SIZE-LABEL: 'test_geps'
19; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %giant_gep0 = getelementptr inbounds i8, ptr undef, i64 9223372036854775807
20; SIZE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %giant_gep1 = getelementptr inbounds i8, ptr undef, i128 295147905179352825855
21; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret void
22;
23; SIZE_LATE-LABEL: 'test_geps'
24; SIZE_LATE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %giant_gep0 = getelementptr inbounds i8, ptr undef, i64 9223372036854775807
25; SIZE_LATE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %giant_gep1 = getelementptr inbounds i8, ptr undef, i128 295147905179352825855
26; SIZE_LATE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret void
27;
28
29  ; Cost of scalar geps should be zero.
30  ; We expect it to be folded into the instruction addressing mode.
31
32
33  ; Vector geps should also have zero cost.
34
35  ; Check that we handle outlandishly large GEPs properly.  This is unlikely to
36  ; be a valid pointer, but LLVM still generates GEPs like this sometimes in
37  ; dead code.
38  ; This GEP has index INT64_MAX, which is cost 1.
39  %giant_gep0 = getelementptr inbounds i8, ptr undef, i64 9223372036854775807
40
41  ; This GEP index wraps around to -1, which is cost 0.
42  %giant_gep1 = getelementptr inbounds i8, ptr undef, i128 295147905179352825855
43
44  ret void
45}
46