xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/2010-05-21-BuildVector.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 %s -o - | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; Radar 7872877
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine void @test(float* %fltp, i32 %packedValue, float* %table) nounwind {
5*9880d681SAndroid Build Coastguard Workerentry:
6*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %fltp
7*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x float> undef, float %0, i32 0
8*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> zeroinitializer
9*9880d681SAndroid Build Coastguard Worker  %3 = shl i32 %packedValue, 16
10*9880d681SAndroid Build Coastguard Worker  %4 = ashr i32 %3, 30
11*9880d681SAndroid Build Coastguard Worker  %.sum = add i32 %4, 4
12*9880d681SAndroid Build Coastguard Worker  %5 = getelementptr inbounds float, float* %table, i32 %.sum
13*9880d681SAndroid Build Coastguard Worker;CHECK: vldr s
14*9880d681SAndroid Build Coastguard Worker  %6 = load float, float* %5, align 4
15*9880d681SAndroid Build Coastguard Worker  %tmp11 = insertelement <4 x float> undef, float %6, i32 0
16*9880d681SAndroid Build Coastguard Worker  %7 = shl i32 %packedValue, 18
17*9880d681SAndroid Build Coastguard Worker  %8 = ashr i32 %7, 30
18*9880d681SAndroid Build Coastguard Worker  %.sum12 = add i32 %8, 4
19*9880d681SAndroid Build Coastguard Worker  %9 = getelementptr inbounds float, float* %table, i32 %.sum12
20*9880d681SAndroid Build Coastguard Worker;CHECK: vldr s
21*9880d681SAndroid Build Coastguard Worker  %10 = load float, float* %9, align 4
22*9880d681SAndroid Build Coastguard Worker  %tmp9 = insertelement <4 x float> %tmp11, float %10, i32 1
23*9880d681SAndroid Build Coastguard Worker  %11 = shl i32 %packedValue, 20
24*9880d681SAndroid Build Coastguard Worker  %12 = ashr i32 %11, 30
25*9880d681SAndroid Build Coastguard Worker  %.sum13 = add i32 %12, 4
26*9880d681SAndroid Build Coastguard Worker  %13 = getelementptr inbounds float, float* %table, i32 %.sum13
27*9880d681SAndroid Build Coastguard Worker;CHECK: vldr s
28*9880d681SAndroid Build Coastguard Worker  %14 = load float, float* %13, align 4
29*9880d681SAndroid Build Coastguard Worker  %tmp7 = insertelement <4 x float> %tmp9, float %14, i32 2
30*9880d681SAndroid Build Coastguard Worker  %15 = shl i32 %packedValue, 22
31*9880d681SAndroid Build Coastguard Worker  %16 = ashr i32 %15, 30
32*9880d681SAndroid Build Coastguard Worker  %.sum14 = add i32 %16, 4
33*9880d681SAndroid Build Coastguard Worker  %17 = getelementptr inbounds float, float* %table, i32 %.sum14
34*9880d681SAndroid Build Coastguard Worker;CHECK: vldr s
35*9880d681SAndroid Build Coastguard Worker  %18 = load float, float* %17, align 4
36*9880d681SAndroid Build Coastguard Worker  %tmp5 = insertelement <4 x float> %tmp7, float %18, i32 3
37*9880d681SAndroid Build Coastguard Worker  %19 = fmul <4 x float> %tmp5, %2
38*9880d681SAndroid Build Coastguard Worker  %20 = bitcast float* %fltp to i8*
39*9880d681SAndroid Build Coastguard Worker  tail call void @llvm.arm.neon.vst1.p0i8.v4f32(i8* %20, <4 x float> %19, i32 1)
40*9880d681SAndroid Build Coastguard Worker  ret void
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst1.p0i8.v4f32(i8*, <4 x float>, i32) nounwind
44