xref: /aosp_15_r20/external/llvm/test/Transforms/InstCombine/neon-intrinsics.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; The alignment arguments for NEON load/store intrinsics can be increased
4*9880d681SAndroid Build Coastguard Worker; by instcombine.  Check for this.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; CHECK: vld4.v2i32.p0i8({{.*}}, i32 32)
7*9880d681SAndroid Build Coastguard Worker; CHECK: vst4.p0i8.v2i32({{.*}}, i32 16)
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker@x = common global [8 x i32] zeroinitializer, align 32
10*9880d681SAndroid Build Coastguard Worker@y = common global [8 x i32] zeroinitializer, align 16
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker%struct.__neon_int32x2x4_t = type { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> }
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine void @test() nounwind ssp {
15*9880d681SAndroid Build Coastguard Worker  %tmp1 = call %struct.__neon_int32x2x4_t @llvm.arm.neon.vld4.v2i32.p0i8(i8* bitcast ([8 x i32]* @x to i8*), i32 1)
16*9880d681SAndroid Build Coastguard Worker  %tmp2 = extractvalue %struct.__neon_int32x2x4_t %tmp1, 0
17*9880d681SAndroid Build Coastguard Worker  %tmp3 = extractvalue %struct.__neon_int32x2x4_t %tmp1, 1
18*9880d681SAndroid Build Coastguard Worker  %tmp4 = extractvalue %struct.__neon_int32x2x4_t %tmp1, 2
19*9880d681SAndroid Build Coastguard Worker  %tmp5 = extractvalue %struct.__neon_int32x2x4_t %tmp1, 3
20*9880d681SAndroid Build Coastguard Worker  call void @llvm.arm.neon.vst4.p0i8.v2i32(i8* bitcast ([8 x i32]* @y to i8*), <2 x i32> %tmp2, <2 x i32> %tmp3, <2 x i32> %tmp4, <2 x i32> %tmp5, i32 1)
21*9880d681SAndroid Build Coastguard Worker  ret void
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdeclare %struct.__neon_int32x2x4_t @llvm.arm.neon.vld4.v2i32.p0i8(i8*, i32) nounwind readonly
25*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst4.p0i8.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32) nounwind
26