brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · e4e45eb Raw
172 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=slp-vectorizer -S -o - -mtriple=x86_64-unknown-linux -mcpu=bdver2 | FileCheck %s3 4define <2 x i8> @g(<2 x i8> %x, <2 x i8> %y) {5; CHECK-LABEL: @g(6; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]], <2 x i32> <i32 0, i32 3>7; CHECK-NEXT:    [[TMP2:%.*]] = mul <2 x i8> [[TMP1]], [[TMP1]]8; CHECK-NEXT:    ret <2 x i8> [[TMP2]]9;10  %x0 = extractelement <2 x i8> %x, i32 011  %y1 = extractelement <2 x i8> %y, i32 112  %x0x0 = mul i8 %x0, %x013  %y1y1 = mul i8 %y1, %y114  %ins1 = insertelement <2 x i8> undef, i8 %x0x0, i32 015  %ins2 = insertelement <2 x i8> %ins1, i8 %y1y1, i32 116  ret <2 x i8> %ins217}18 19define <4 x i8> @h(<4 x i8> %x, <4 x i8> %y) {20; CHECK-LABEL: @h(21; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i8> [[X:%.*]], <4 x i8> [[Y:%.*]], <4 x i32> <i32 0, i32 3, i32 5, i32 6>22; CHECK-NEXT:    [[TMP2:%.*]] = mul <4 x i8> [[TMP1]], [[TMP1]]23; CHECK-NEXT:    ret <4 x i8> [[TMP2]]24;25  %x0 = extractelement <4 x i8> %x, i32 026  %x3 = extractelement <4 x i8> %x, i32 327  %y1 = extractelement <4 x i8> %y, i32 128  %y2 = extractelement <4 x i8> %y, i32 229  %x0x0 = mul i8 %x0, %x030  %x3x3 = mul i8 %x3, %x331  %y1y1 = mul i8 %y1, %y132  %y2y2 = mul i8 %y2, %y233  %ins1 = insertelement <4 x i8> undef, i8 %x0x0, i32 034  %ins2 = insertelement <4 x i8> %ins1, i8 %x3x3, i32 135  %ins3 = insertelement <4 x i8> %ins2, i8 %y1y1, i32 236  %ins4 = insertelement <4 x i8> %ins3, i8 %y2y2, i32 337  ret <4 x i8> %ins438}39 40define <4 x i8> @h_undef(<4 x i8> %x, <4 x i8> %y) {41; CHECK-LABEL: @h_undef(42; CHECK-NEXT:    [[X0:%.*]] = extractelement <4 x i8> undef, i32 043; CHECK-NEXT:    [[X3:%.*]] = extractelement <4 x i8> [[X:%.*]], i32 344; CHECK-NEXT:    [[Y1:%.*]] = extractelement <4 x i8> [[Y:%.*]], i32 145; CHECK-NEXT:    [[Y2:%.*]] = extractelement <4 x i8> [[Y]], i32 246; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <4 x i8> poison, i8 [[X0]], i32 047; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x i8> [[TMP1]], i8 [[X3]], i32 148; CHECK-NEXT:    [[TMP5:%.*]] = insertelement <4 x i8> [[TMP4]], i8 [[Y1]], i32 249; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <4 x i8> [[TMP5]], i8 [[Y2]], i32 350; CHECK-NEXT:    [[TMP3:%.*]] = mul <4 x i8> [[TMP2]], [[TMP2]]51; CHECK-NEXT:    ret <4 x i8> [[TMP3]]52;53  %x0 = extractelement <4 x i8> undef, i32 054  %x3 = extractelement <4 x i8> %x, i32 355  %y1 = extractelement <4 x i8> %y, i32 156  %y2 = extractelement <4 x i8> %y, i32 257  %x0x0 = mul i8 %x0, %x058  %x3x3 = mul i8 %x3, %x359  %y1y1 = mul i8 %y1, %y160  %y2y2 = mul i8 %y2, %y261  %ins1 = insertelement <4 x i8> undef, i8 %x0x0, i32 062  %ins2 = insertelement <4 x i8> %ins1, i8 %x3x3, i32 163  %ins3 = insertelement <4 x i8> %ins2, i8 %y1y1, i32 264  %ins4 = insertelement <4 x i8> %ins3, i8 %y2y2, i32 365  ret <4 x i8> %ins466}67 68define i8 @i(<4 x i8> %x, <4 x i8> %y) {69; CHECK-LABEL: @i(70; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i8> [[X:%.*]], <4 x i8> [[Y:%.*]], <4 x i32> <i32 0, i32 3, i32 5, i32 6>71; CHECK-NEXT:    [[TMP2:%.*]] = mul <4 x i8> [[TMP1]], [[TMP1]]72; CHECK-NEXT:    [[TMP3:%.*]] = call i8 @llvm.vector.reduce.add.v4i8(<4 x i8> [[TMP2]])73; CHECK-NEXT:    ret i8 [[TMP3]]74;75  %x0 = extractelement <4 x i8> %x, i32 076  %x3 = extractelement <4 x i8> %x, i32 377  %y1 = extractelement <4 x i8> %y, i32 178  %y2 = extractelement <4 x i8> %y, i32 279  %x0x0 = mul i8 %x0, %x080  %x3x3 = mul i8 %x3, %x381  %y1y1 = mul i8 %y1, %y182  %y2y2 = mul i8 %y2, %y283  %1 = add i8 %x0x0, %x3x384  %2 = add i8 %y1y1, %y2y285  %3 = add i8 %1, %286  ret i8 %387}88 89define i8 @j(<4 x i8> %x, <4 x i8> %y) {90; CHECK-LABEL: @j(91; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i8> [[X:%.*]], <4 x i8> [[Y:%.*]], <2 x i32> <i32 0, i32 5>92; CHECK-NEXT:    [[TMP2:%.*]] = mul <2 x i8> [[TMP1]], [[TMP1]]93; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> [[Y]], <2 x i32> <i32 3, i32 6>94; CHECK-NEXT:    [[TMP4:%.*]] = mul <2 x i8> [[TMP3]], [[TMP3]]95; CHECK-NEXT:    [[TMP5:%.*]] = add <2 x i8> [[TMP2]], [[TMP4]]96; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <2 x i8> [[TMP5]], i32 097; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <2 x i8> [[TMP5]], i32 198; CHECK-NEXT:    [[TMP8:%.*]] = sdiv i8 [[TMP6]], [[TMP7]]99; CHECK-NEXT:    ret i8 [[TMP8]]100;101  %x0 = extractelement <4 x i8> %x, i32 0102  %x3 = extractelement <4 x i8> %x, i32 3103  %y1 = extractelement <4 x i8> %y, i32 1104  %y2 = extractelement <4 x i8> %y, i32 2105  %x0x0 = mul i8 %x0, %x0106  %x3x3 = mul i8 %x3, %x3107  %y1y1 = mul i8 %y1, %y1108  %y2y2 = mul i8 %y2, %y2109  %1 = add i8 %x0x0, %x3x3110  %2 = add i8 %y1y1, %y2y2111  %3 = sdiv i8 %1, %2112  ret i8 %3113}114 115define i8 @k(<4 x i8> %x) {116; CHECK-LABEL: @k(117; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <4 x i8> [[TMP1:%.*]], <4 x i8> poison, <2 x i32> <i32 0, i32 1>118; CHECK-NEXT:    [[TMP10:%.*]] = mul <2 x i8> [[TMP2]], [[TMP2]]119; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> poison, <2 x i32> <i32 2, i32 3>120; CHECK-NEXT:    [[TMP4:%.*]] = mul <2 x i8> [[TMP3]], [[TMP3]]121; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <2 x i8> [[TMP4]], <2 x i8> poison, <2 x i32> <i32 1, i32 0>122; CHECK-NEXT:    [[TMP6:%.*]] = add <2 x i8> [[TMP10]], [[TMP5]]123; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <2 x i8> [[TMP6]], i32 0124; CHECK-NEXT:    [[TMP8:%.*]] = extractelement <2 x i8> [[TMP6]], i32 1125; CHECK-NEXT:    [[TMP9:%.*]] = sdiv i8 [[TMP7]], [[TMP8]]126; CHECK-NEXT:    ret i8 [[TMP9]]127;128  %x0 = extractelement <4 x i8> %x, i32 0129  %x3 = extractelement <4 x i8> %x, i32 3130  %x1 = extractelement <4 x i8> %x, i32 1131  %x2 = extractelement <4 x i8> %x, i32 2132  %x0x0 = mul i8 %x0, %x0133  %x3x3 = mul i8 %x3, %x3134  %x1x1 = mul i8 %x1, %x1135  %x2x2 = mul i8 %x2, %x2136  %1 = add i8 %x0x0, %x3x3137  %2 = add i8 %x1x1, %x2x2138  %3 = sdiv i8 %1, %2139  ret i8 %3140}141 142define i8 @k_bb(<4 x i8> %x) {143; CHECK-LABEL: @k_bb(144; CHECK-NEXT:    br label [[BB1:%.*]]145; CHECK:       bb1:146; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <4 x i8> [[TMP1:%.*]], <4 x i8> poison, <2 x i32> <i32 0, i32 1>147; CHECK-NEXT:    [[TMP10:%.*]] = mul <2 x i8> [[TMP2]], [[TMP2]]148; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> poison, <2 x i32> <i32 2, i32 3>149; CHECK-NEXT:    [[TMP4:%.*]] = mul <2 x i8> [[TMP3]], [[TMP3]]150; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <2 x i8> [[TMP4]], <2 x i8> poison, <2 x i32> <i32 1, i32 0>151; CHECK-NEXT:    [[TMP6:%.*]] = add <2 x i8> [[TMP10]], [[TMP5]]152; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <2 x i8> [[TMP6]], i32 0153; CHECK-NEXT:    [[TMP8:%.*]] = extractelement <2 x i8> [[TMP6]], i32 1154; CHECK-NEXT:    [[TMP9:%.*]] = sdiv i8 [[TMP7]], [[TMP8]]155; CHECK-NEXT:    ret i8 [[TMP9]]156;157  %x0 = extractelement <4 x i8> %x, i32 0158  br label %bb1159bb1:160  %x3 = extractelement <4 x i8> %x, i32 3161  %x1 = extractelement <4 x i8> %x, i32 1162  %x2 = extractelement <4 x i8> %x, i32 2163  %x0x0 = mul i8 %x0, %x0164  %x3x3 = mul i8 %x3, %x3165  %x1x1 = mul i8 %x1, %x1166  %x2x2 = mul i8 %x2, %x2167  %1 = add i8 %x0x0, %x3x3168  %2 = add i8 %x1x1, %x2x2169  %3 = sdiv i8 %1, %2170  ret i8 %3171}172