[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / Transforms / ConstantHoisting / ARM / gep-struct-index.ll
blob45f4500b37c17a45f7da7b461bbcf73da86f3263
1 ; RUN: opt -consthoist -S < %s | FileCheck %s
2 target triple = "thumbv6m-none-eabi"
4 %T = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
5 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
6 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
7 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
8 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
9 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
10 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
11 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
12 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
13 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
14 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
15 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
16 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
17 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
18 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
19 i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32,
20 i32, i32, i32, i32, i32, i32 }
22 ; Indices for GEPs that index into a struct type should not be hoisted.
23 define i32 @test1(%T* %P) nounwind {
24 ; CHECK-LABEL:  @test1
25 ; CHECK:        %const = bitcast i32 256 to i32
26 ; CHECK:        %addr1 = getelementptr %T, %T* %P, i32 %const, i32 256
27 ; CHECK:        %addr2 = getelementptr %T, %T* %P, i32 %const, i32 256
28 ; The first index into the pointer is hoisted, but the second one into the
29 ; struct isn't.
30   %addr1 = getelementptr %T, %T* %P, i32 256, i32 256
31   %tmp1 = load i32, i32* %addr1
32   %addr2 = getelementptr %T, %T* %P, i32 256, i32 256
33   %tmp2 = load i32, i32* %addr2
34   %tmp4 = add i32 %tmp1, %tmp2
35   ret i32 %tmp4