brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.1 KiB · 723537b Raw
249 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 32; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -mcpu=alderlake < %s| FileCheck %s3 4define void @test() {5; CHECK-LABEL: define void @test(6; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {7; CHECK-NEXT:  entry:8; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr i32, ptr null, i64 19; CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[ARRAYIDX5]], align 410; CHECK-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr i32, ptr null, i64 3311; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX13]], align 412; CHECK-NEXT:    [[ARRAYIDX22:%.*]] = getelementptr i32, ptr null, i64 6013; CHECK-NEXT:    [[TMP8:%.*]] = call <8 x i32> @llvm.masked.load.v8i32.p0(ptr align 4 null, <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true>, <8 x i32> poison)14; CHECK-NEXT:    [[TMP10:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> poison, <2 x i32> <i32 0, i32 7>15; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[ARRAYIDX22]], align 416; CHECK-NEXT:    [[TMP5:%.*]] = insertelement <4 x i32> poison, i32 [[TMP2]], i32 217; CHECK-NEXT:    [[TMP6:%.*]] = insertelement <4 x i32> [[TMP5]], i32 [[TMP9]], i32 318; CHECK-NEXT:    [[TMP12:%.*]] = shufflevector <2 x i32> [[TMP10]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>19; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> [[TMP12]], <4 x i32> <i32 4, i32 5, i32 2, i32 3>20; CHECK-NEXT:    [[TMP3:%.*]] = mul <4 x i32> [[TMP1]], [[TMP7]]21; CHECK-NEXT:    [[TMP4:%.*]] = ashr <4 x i32> [[TMP3]], zeroinitializer22; CHECK-NEXT:    [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP4]], <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>23; CHECK-NEXT:    store <4 x i32> [[TMP11]], ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 1624; CHECK-NEXT:    ret void25;26entry:27  %arrayidx1 = getelementptr i32, ptr null, i64 128  %0 = load i32, ptr %arrayidx1, align 429  %arrayidx2 = getelementptr i32, ptr null, i64 6330  %1 = load i32, ptr %arrayidx2, align 431  %mul = mul i32 %1, %032  %conv = sext i32 %mul to i6433  %shr = ashr i64 %conv, 034  %conv3 = trunc i64 %shr to i3235  store i32 %conv3, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 1636  %arrayidx5 = getelementptr i32, ptr null, i64 3337  %2 = load i32, ptr %arrayidx5, align 438  %arrayidx6 = getelementptr i32, ptr null, i64 6239  %3 = load i32, ptr %arrayidx6, align 440  %mul7 = mul i32 %3, %241  %conv8 = sext i32 %mul7 to i6442  %shr10 = ashr i64 %conv8, 043  %conv11 = trunc i64 %shr10 to i3244  store i32 %conv11, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 1), align 445  %arrayidx13 = getelementptr i32, ptr null, i64 746  %4 = load i32, ptr %arrayidx13, align 447  %arrayidx14 = getelementptr i32, ptr null, i64 6148  %5 = load i32, ptr %arrayidx14, align 449  %mul15 = mul i32 %5, %450  %conv16 = sext i32 %mul15 to i6451  %shr18 = ashr i64 %conv16, 052  %conv19 = trunc i64 %shr18 to i3253  store i32 %conv19, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 2), align 854  %6 = load i32, ptr null, align 455  %arrayidx22 = getelementptr i32, ptr null, i64 6056  %7 = load i32, ptr %arrayidx22, align 457  %mul23 = mul i32 %7, %658  %conv24 = sext i32 %mul23 to i6459  %shr26 = ashr i64 %conv24, 060  %conv27 = trunc i64 %shr26 to i3261  store i32 %conv27, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 3), align 462  ret void63}64 65define void @test1() {66; CHECK-LABEL: define void @test1(67; CHECK-SAME: ) #[[ATTR0]] {68; CHECK-NEXT:  entry:69; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr i32, ptr null, i64 170; CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[ARRAYIDX5]], align 471; CHECK-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr i32, ptr null, i64 3372; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX13]], align 473; CHECK-NEXT:    [[ARRAYIDX22:%.*]] = getelementptr i32, ptr null, i64 6074; CHECK-NEXT:    [[TMP8:%.*]] = call <8 x i32> @llvm.masked.load.v8i32.p0(ptr align 4 null, <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true>, <8 x i32> poison)75; CHECK-NEXT:    [[TMP10:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> poison, <2 x i32> <i32 0, i32 7>76; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[ARRAYIDX22]], align 477; CHECK-NEXT:    [[TMP11:%.*]] = insertelement <4 x i32> poison, i32 [[TMP2]], i32 278; CHECK-NEXT:    [[TMP12:%.*]] = insertelement <4 x i32> [[TMP11]], i32 [[TMP9]], i32 379; CHECK-NEXT:    [[TMP14:%.*]] = shufflevector <2 x i32> [[TMP10]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>80; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP12]], <4 x i32> [[TMP14]], <4 x i32> <i32 4, i32 5, i32 2, i32 3>81; CHECK-NEXT:    [[TMP3:%.*]] = mul <4 x i32> [[TMP1]], [[TMP7]]82; CHECK-NEXT:    [[TMP4:%.*]] = sext <4 x i32> [[TMP3]] to <4 x i64>83; CHECK-NEXT:    [[TMP5:%.*]] = lshr <4 x i64> [[TMP4]], zeroinitializer84; CHECK-NEXT:    [[TMP6:%.*]] = trunc <4 x i64> [[TMP5]] to <4 x i32>85; CHECK-NEXT:    [[TMP13:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>86; CHECK-NEXT:    store <4 x i32> [[TMP13]], ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 1687; CHECK-NEXT:    ret void88;89entry:90  %arrayidx1 = getelementptr i32, ptr null, i64 191  %0 = load i32, ptr %arrayidx1, align 492  %arrayidx2 = getelementptr i32, ptr null, i64 6393  %1 = load i32, ptr %arrayidx2, align 494  %mul = mul i32 %1, %095  %conv = sext i32 %mul to i6496  %shr = lshr i64 %conv, 097  %conv3 = trunc i64 %shr to i3298  store i32 %conv3, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 1699  %arrayidx5 = getelementptr i32, ptr null, i64 33100  %2 = load i32, ptr %arrayidx5, align 4101  %arrayidx6 = getelementptr i32, ptr null, i64 62102  %3 = load i32, ptr %arrayidx6, align 4103  %mul7 = mul i32 %3, %2104  %conv8 = sext i32 %mul7 to i64105  %shr10 = lshr i64 %conv8, 0106  %conv11 = trunc i64 %shr10 to i32107  store i32 %conv11, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 1), align 4108  %arrayidx13 = getelementptr i32, ptr null, i64 7109  %4 = load i32, ptr %arrayidx13, align 4110  %arrayidx14 = getelementptr i32, ptr null, i64 61111  %5 = load i32, ptr %arrayidx14, align 4112  %mul15 = mul i32 %5, %4113  %conv16 = sext i32 %mul15 to i64114  %shr18 = lshr i64 %conv16, 0115  %conv19 = trunc i64 %shr18 to i32116  store i32 %conv19, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 2), align 8117  %6 = load i32, ptr null, align 4118  %arrayidx22 = getelementptr i32, ptr null, i64 60119  %7 = load i32, ptr %arrayidx22, align 4120  %mul23 = mul i32 %7, %6121  %conv24 = sext i32 %mul23 to i64122  %shr26 = lshr i64 %conv24, 0123  %conv27 = trunc i64 %shr26 to i32124  store i32 %conv27, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 3), align 4125  ret void126}127 128define void @test_div() {129; CHECK-LABEL: define void @test_div(130; CHECK-SAME: ) #[[ATTR0]] {131; CHECK-NEXT:  entry:132; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr i32, ptr null, i64 1133; CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX5]], align 4134; CHECK-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr i32, ptr null, i64 33135; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX13]], align 4136; CHECK-NEXT:    [[ARRAYIDX22:%.*]] = getelementptr i32, ptr null, i64 60137; CHECK-NEXT:    [[TMP8:%.*]] = call <8 x i32> @llvm.masked.load.v8i32.p0(ptr align 4 null, <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true>, <8 x i32> poison)138; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> poison, <2 x i32> <i32 0, i32 7>139; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[ARRAYIDX22]], align 4140; CHECK-NEXT:    [[TMP5:%.*]] = insertelement <4 x i32> poison, i32 [[TMP2]], i32 2141; CHECK-NEXT:    [[TMP11:%.*]] = insertelement <4 x i32> [[TMP5]], i32 [[TMP4]], i32 3142; CHECK-NEXT:    [[TMP12:%.*]] = shufflevector <2 x i32> [[TMP3]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>143; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP11]], <4 x i32> [[TMP12]], <4 x i32> <i32 4, i32 5, i32 2, i32 3>144; CHECK-NEXT:    [[TMP9:%.*]] = mul <4 x i32> [[TMP1]], [[TMP7]]145; CHECK-NEXT:    [[TMP10:%.*]] = udiv <4 x i32> [[TMP9]], <i32 2, i32 1, i32 2, i32 1>146; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>147; CHECK-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 16148; CHECK-NEXT:    ret void149;150entry:151  %arrayidx1 = getelementptr i32, ptr null, i64 1152  %0 = load i32, ptr %arrayidx1, align 4153  %arrayidx2 = getelementptr i32, ptr null, i64 63154  %1 = load i32, ptr %arrayidx2, align 4155  %mul = mul i32 %1, %0156  %conv = zext i32 %mul to i64157  %shr = udiv i64 %conv, 1158  %conv3 = trunc i64 %shr to i32159  store i32 %conv3, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 16160  %arrayidx5 = getelementptr i32, ptr null, i64 33161  %2 = load i32, ptr %arrayidx5, align 4162  %arrayidx6 = getelementptr i32, ptr null, i64 62163  %3 = load i32, ptr %arrayidx6, align 4164  %mul7 = mul i32 %3, %2165  %conv8 = zext i32 %mul7 to i64166  %shr10 = udiv i64 %conv8, 2167  %conv11 = trunc i64 %shr10 to i32168  store i32 %conv11, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 1), align 4169  %arrayidx13 = getelementptr i32, ptr null, i64 7170  %4 = load i32, ptr %arrayidx13, align 4171  %arrayidx14 = getelementptr i32, ptr null, i64 61172  %5 = load i32, ptr %arrayidx14, align 4173  %mul15 = mul i32 %5, %4174  %conv16 = zext i32 %mul15 to i64175  %shr18 = udiv i64 %conv16, 1176  %conv19 = trunc i64 %shr18 to i32177  store i32 %conv19, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 2), align 8178  %6 = load i32, ptr null, align 4179  %arrayidx22 = getelementptr i32, ptr null, i64 60180  %7 = load i32, ptr %arrayidx22, align 4181  %mul23 = mul i32 %7, %6182  %conv24 = zext i32 %mul23 to i64183  %shr26 = udiv i64 %conv24, 2184  %conv27 = trunc i64 %shr26 to i32185  store i32 %conv27, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 3), align 4186  ret void187}188 189define void @test_rem() {190; CHECK-LABEL: define void @test_rem(191; CHECK-SAME: ) #[[ATTR0]] {192; CHECK-NEXT:  entry:193; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr i32, ptr null, i64 1194; CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX5]], align 4195; CHECK-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr i32, ptr null, i64 33196; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX13]], align 4197; CHECK-NEXT:    [[ARRAYIDX22:%.*]] = getelementptr i32, ptr null, i64 60198; CHECK-NEXT:    [[TMP8:%.*]] = call <8 x i32> @llvm.masked.load.v8i32.p0(ptr align 4 null, <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true>, <8 x i32> poison)199; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> poison, <2 x i32> <i32 0, i32 7>200; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[ARRAYIDX22]], align 4201; CHECK-NEXT:    [[TMP5:%.*]] = insertelement <4 x i32> poison, i32 [[TMP2]], i32 2202; CHECK-NEXT:    [[TMP11:%.*]] = insertelement <4 x i32> [[TMP5]], i32 [[TMP4]], i32 3203; CHECK-NEXT:    [[TMP12:%.*]] = shufflevector <2 x i32> [[TMP3]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>204; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP11]], <4 x i32> [[TMP12]], <4 x i32> <i32 4, i32 5, i32 2, i32 3>205; CHECK-NEXT:    [[TMP9:%.*]] = mul <4 x i32> [[TMP1]], [[TMP7]]206; CHECK-NEXT:    [[TMP10:%.*]] = urem <4 x i32> [[TMP9]], <i32 1, i32 1, i32 2, i32 1>207; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>208; CHECK-NEXT:    store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 16209; CHECK-NEXT:    ret void210;211entry:212  %arrayidx1 = getelementptr i32, ptr null, i64 1213  %0 = load i32, ptr %arrayidx1, align 4214  %arrayidx2 = getelementptr i32, ptr null, i64 63215  %1 = load i32, ptr %arrayidx2, align 4216  %mul = mul i32 %1, %0217  %conv = zext i32 %mul to i64218  %shr = urem i64 %conv, 1219  %conv3 = trunc i64 %shr to i32220  store i32 %conv3, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 16221  %arrayidx5 = getelementptr i32, ptr null, i64 33222  %2 = load i32, ptr %arrayidx5, align 4223  %arrayidx6 = getelementptr i32, ptr null, i64 62224  %3 = load i32, ptr %arrayidx6, align 4225  %mul7 = mul i32 %3, %2226  %conv8 = zext i32 %mul7 to i64227  %shr10 = urem i64 %conv8, 2228  %conv11 = trunc i64 %shr10 to i32229  store i32 %conv11, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 1), align 4230  %arrayidx13 = getelementptr i32, ptr null, i64 7231  %4 = load i32, ptr %arrayidx13, align 4232  %arrayidx14 = getelementptr i32, ptr null, i64 61233  %5 = load i32, ptr %arrayidx14, align 4234  %mul15 = mul i32 %5, %4235  %conv16 = zext i32 %mul15 to i64236  %shr18 = urem i64 %conv16, 1237  %conv19 = trunc i64 %shr18 to i32238  store i32 %conv19, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 2), align 8239  %6 = load i32, ptr null, align 4240  %arrayidx22 = getelementptr i32, ptr null, i64 60241  %7 = load i32, ptr %arrayidx22, align 4242  %mul23 = mul i32 %7, %6243  %conv24 = zext i32 %mul23 to i64244  %shr26 = urem i64 %conv24, 1245  %conv27 = trunc i64 %shr26 to i32246  store i32 %conv27, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 3), align 4247  ret void248}249