90 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -slp-threshold=-10 < %s | FileCheck %s3 4define void @test(ptr %0, i32 %1, i32 %2) {5; CHECK-LABEL: define void @test(6; CHECK-SAME: ptr [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]]) {7; CHECK-NEXT: [[ENTRY:.*:]]8; CHECK-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i64 489; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i64 5610; CHECK-NEXT: [[TMP7:%.*]] = and i32 [[TMP2]], [[TMP1]]11; CHECK-NEXT: [[ADD_NARROWED_I_I:%.*]] = shl i32 [[TMP1]], 112; CHECK-NEXT: [[TMP10:%.*]] = lshr i32 [[TMP7]], 113; CHECK-NEXT: [[TMP18:%.*]] = zext i32 [[ADD_NARROWED_I_I]] to i6414; CHECK-NEXT: [[TMP19:%.*]] = add i64 [[TMP18]], -115; CHECK-NEXT: [[TMP21:%.*]] = trunc i64 [[TMP19]] to i3216; CHECK-NEXT: [[TMP28:%.*]] = insertelement <2 x i32> poison, i32 [[TMP21]], i32 017; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <2 x i32> [[TMP28]], <2 x i32> poison, <2 x i32> zeroinitializer18; CHECK-NEXT: [[TMP12:%.*]] = and <2 x i32> [[TMP11]], splat (i32 -2)19; CHECK-NEXT: [[TMP13:%.*]] = insertelement <2 x i32> <i32 poison, i32 -2>, i32 [[TMP1]], i32 020; CHECK-NEXT: [[TMP14:%.*]] = or <2 x i32> [[TMP13]], [[TMP12]]21; CHECK-NEXT: [[TMP15:%.*]] = xor <2 x i32> [[TMP13]], [[TMP12]]22; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <2 x i32> [[TMP14]], <2 x i32> [[TMP15]], <2 x i32> <i32 0, i32 3>23; CHECK-NEXT: [[TMP17:%.*]] = load <2 x i32>, ptr [[TMP5]], align 824; CHECK-NEXT: [[TMP32:%.*]] = insertelement <2 x i32> <i32 1, i32 poison>, i32 [[TMP1]], i32 125; CHECK-NEXT: [[TMP33:%.*]] = and <2 x i32> [[TMP17]], [[TMP32]]26; CHECK-NEXT: call void @llvm.stackrestore.p0(ptr null)27; CHECK-NEXT: [[TMP20:%.*]] = shufflevector <2 x i32> [[TMP33]], <2 x i32> poison, <2 x i32> <i32 poison, i32 0>28; CHECK-NEXT: [[TMP34:%.*]] = insertelement <2 x i32> [[TMP20]], i32 [[TMP10]], i32 029; CHECK-NEXT: [[TMP22:%.*]] = zext <2 x i32> [[TMP34]] to <2 x i64>30; CHECK-NEXT: [[TMP23:%.*]] = zext <2 x i32> [[TMP33]] to <2 x i64>31; CHECK-NEXT: [[TMP35:%.*]] = shl <2 x i64> [[TMP23]], splat (i64 1)32; CHECK-NEXT: [[TMP25:%.*]] = or <2 x i64> [[TMP35]], [[TMP22]]33; CHECK-NEXT: [[TMP26:%.*]] = trunc <2 x i64> [[TMP25]] to <2 x i32>34; CHECK-NEXT: [[TMP27:%.*]] = trunc <2 x i64> [[TMP25]] to <2 x i32>35; CHECK-NEXT: [[TMP24:%.*]] = tail call i32 asm sideeffect "", "=r,0,~{dirflag},~{fpsr},~{flags}"(i32 0)36; CHECK-NEXT: store <2 x i32> [[TMP16]], ptr [[TMP3]], align 1637; CHECK-NEXT: [[TMP29:%.*]] = shufflevector <2 x i32> [[TMP32]], <2 x i32> poison, <2 x i32> <i32 1, i32 1>38; CHECK-NEXT: [[TMP30:%.*]] = and <2 x i32> [[TMP29]], [[TMP26]]39; CHECK-NEXT: [[TMP31:%.*]] = or <2 x i32> [[TMP30]], [[TMP27]]40; CHECK-NEXT: store <2 x i32> [[TMP31]], ptr [[TMP5]], align 841; CHECK-NEXT: ret void42;43entry:44 %3 = getelementptr i8, ptr %0, i64 4845 %4 = getelementptr i8, ptr %0, i64 5246 %5 = getelementptr i8, ptr %0, i64 5647 %6 = getelementptr i8, ptr %0, i64 6048 %.pre21.i = load i32, ptr %5, align 849 %.pre23.i = load i32, ptr %6, align 450 %7 = and i32 %2, %151 %8 = and i32 %.pre21.i, 152 %9 = and i32 %1, %.pre23.i53 call void @llvm.stackrestore.p0(ptr null)54 %add.narrowed.i.i = shl i32 %1, 155 %10 = lshr i32 %7, 156 %11 = zext i32 %10 to i6457 %12 = zext i32 %8 to i6458 %reass.add1.i = shl i64 %12, 159 %13 = or i64 %reass.add1.i, %1160 %14 = trunc i64 %13 to i3261 %15 = zext i32 %9 to i6462 %reass.add2.i = shl i64 %15, 163 %16 = or i64 %reass.add2.i, %1264 %17 = trunc i64 %16 to i3265 %18 = zext i32 %add.narrowed.i.i to i6466 %19 = add i64 %18, -167 %20 = trunc i64 %19 to i3268 %21 = trunc i64 %19 to i3269 %22 = trunc i64 %13 to i3270 %23 = trunc i64 %16 to i3271 %24 = tail call i32 asm sideeffect "", "=r,0,~{dirflag},~{fpsr},~{flags}"(i32 0)72 %25 = and i32 %20, -273 %26 = or i32 %1, %2574 store i32 %26, ptr %3, align 1675 %27 = and i32 %21, -276 %28 = xor i32 %27, -277 store i32 %28, ptr %4, align 478 %29 = and i32 %1, %1479 %30 = or i32 %29, %2280 store i32 %30, ptr %5, align 881 %31 = and i32 %1, %1782 %32 = or i32 %31, %2383 store i32 %32, ptr %6, align 484 ret void85}86 87declare void @llvm.stackrestore.p0(ptr) #088 89attributes #0 = { nocallback nofree nosync nounwind willreturn }90