brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.7 KiB · 3f6ec8c Raw
157 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=-100 < %s | FileCheck %s3 4define void @test(i32 %j.6, i32 %m.4, i8 %v.5, ptr %a, i1 %tobool14.not) {5; CHECK-LABEL: define void @test(6; CHECK-SAME: i32 [[J_6:%.*]], i32 [[M_4:%.*]], i8 [[V_5:%.*]], ptr [[A:%.*]], i1 [[TOBOOL14_NOT:%.*]]) {7; CHECK-NEXT:  [[ENTRY:.*]]:8; CHECK-NEXT:    [[TMP0:%.*]] = insertelement <2 x i8> <i8 0, i8 poison>, i8 [[V_5]], i32 19; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <4 x i32> <i32 poison, i32 poison, i32 1, i32 poison>, i32 [[M_4]], i32 110; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <4 x i32> [[TMP1]], i32 [[J_6]], i32 311; CHECK-NEXT:    br label %[[N:.*]]12; CHECK:       [[ENTRY_O_CRIT_EDGE:.*]]:13; CHECK-NEXT:    br label %[[O:.*]]14; CHECK:       [[N]]:15; CHECK-NEXT:    [[J_0:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[J_6]], %[[IF_END18:.*]] ]16; CHECK-NEXT:    [[L_0:%.*]] = phi i8 [ 0, %[[ENTRY]] ], [ [[L_4:%.*]], %[[IF_END18]] ]17; CHECK-NEXT:    [[TMP3:%.*]] = phi <4 x i32> [ zeroinitializer, %[[ENTRY]] ], [ [[TMP37:%.*]], %[[IF_END18]] ]18; CHECK-NEXT:    store i32 [[J_0]], ptr [[A]], align 419; CHECK-NEXT:    [[CMP_NOT_NOT:%.*]] = icmp eq i8 [[L_0]], 020; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 1, i32 poison, i32 3>21; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP4]], <8 x i32> <i32 0, i32 poison, i32 1, i32 0, i32 0, i32 poison, i32 0, i32 poison>, <8 x i32> <i32 8, i32 poison, i32 10, i32 11, i32 12, i32 1, i32 14, i32 3>22; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <8 x i32> [[TMP5]], <8 x i32> [[TMP4]], <8 x i32> <i32 0, i32 10, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>23; CHECK-NEXT:    br i1 [[CMP_NOT_NOT]], label %[[O_SINK_SPLIT:.*]], label %[[P:.*]]24; CHECK:       [[P]]:25; CHECK-NEXT:    [[TMP7:%.*]] = phi <2 x i8> [ <i8 1, i8 0>, %[[IF_END18]] ], [ [[TMP0]], %[[N]] ]26; CHECK-NEXT:    [[TMP8:%.*]] = phi <8 x i32> [ [[TMP35:%.*]], %[[IF_END18]] ], [ [[TMP6]], %[[N]] ]27; CHECK-NEXT:    [[TMP9:%.*]] = extractelement <8 x i32> [[TMP8]], i32 728; CHECK-NEXT:    [[TMP10:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> poison, <2 x i32> <i32 5, i32 6>29; CHECK-NEXT:    [[TMP11:%.*]] = icmp eq <2 x i32> [[TMP10]], zeroinitializer30; CHECK-NEXT:    [[TMP12:%.*]] = extractelement <2 x i1> [[TMP11]], i32 031; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[TMP12]], i32 [[TMP9]], i32 032; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <2 x i8> [[TMP7]], i32 033; CHECK-NEXT:    [[TMP14:%.*]] = extractelement <2 x i8> [[TMP7]], i32 134; CHECK-NEXT:    [[TMP15:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> poison, <2 x i32> <i32 0, i32 3>35; CHECK-NEXT:    [[TMP16:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> poison, <4 x i32> <i32 poison, i32 1, i32 poison, i32 poison>36; CHECK-NEXT:    [[TMP17:%.*]] = shufflevector <8 x i32> <i32 1, i32 0, i32 poison, i32 poison, i32 undef, i32 undef, i32 undef, i32 undef>, <8 x i32> [[TMP8]], <4 x i32> <i32 0, i32 1, i32 9, i32 poison>37; CHECK-NEXT:    [[TMP18:%.*]] = insertelement <4 x i32> [[TMP17]], i32 [[SPEC_SELECT]], i32 338; CHECK-NEXT:    [[TMP19:%.*]] = extractelement <8 x i32> [[TMP8]], i32 239; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <8 x i32> [[TMP8]], i32 440; CHECK-NEXT:    [[TMP21:%.*]] = extractelement <2 x i1> [[TMP11]], i32 141; CHECK-NEXT:    br i1 [[TMP21]], label %[[O_SINK_SPLIT]], label %[[Q:.*]]42; CHECK:       [[O_SINK_SPLIT]]:43; CHECK-NEXT:    [[SPEC_SELECT_SINK:%.*]] = phi i32 [ [[J_0]], %[[N]] ], [ [[SPEC_SELECT]], %[[P]] ]44; CHECK-NEXT:    [[I_3_PH:%.*]] = phi i32 [ 0, %[[N]] ], [ [[TMP19]], %[[P]] ]45; CHECK-NEXT:    [[L_3_PH:%.*]] = phi i8 [ 0, %[[N]] ], [ [[TMP13]], %[[P]] ]46; CHECK-NEXT:    [[TMP22:%.*]] = phi <4 x i32> [ [[TMP3]], %[[N]] ], [ [[TMP18]], %[[P]] ]47; CHECK-NEXT:    [[CONV10:%.*]] = zext i32 [[SPEC_SELECT_SINK]] to i6448; CHECK-NEXT:    [[CALL11:%.*]] = tail call i32 (ptr, ...) @printf(ptr null, i64 [[CONV10]])49; CHECK-NEXT:    br label %[[O]]50; CHECK:       [[O]]:51; CHECK-NEXT:    [[TMP23:%.*]] = phi <4 x i32> [ poison, %[[ENTRY_O_CRIT_EDGE]] ], [ [[TMP22]], %[[O_SINK_SPLIT]] ]52; CHECK-NEXT:    [[SUB:%.*]] = sub i32 0, [[J_6]]53; CHECK-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], [[I_3_PH]]54; CHECK-NEXT:    [[SUB13:%.*]] = sub i32 0, [[DIV]]55; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <4 x i32> poison, i32 [[SUB]], i32 056; CHECK-NEXT:    [[TMP25:%.*]] = insertelement <4 x i32> [[TMP24]], i32 [[SUB13]], i32 157; CHECK-NEXT:    [[TMP26:%.*]] = shufflevector <4 x i32> [[TMP25]], <4 x i32> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>58; CHECK-NEXT:    [[TMP27:%.*]] = shufflevector <4 x i32> [[TMP26]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>59; CHECK-NEXT:    [[TMP34:%.*]] = shufflevector <4 x i32> [[TMP23]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>60; CHECK-NEXT:    [[TMP28:%.*]] = shufflevector <8 x i32> [[TMP27]], <8 x i32> [[TMP34]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>61; CHECK-NEXT:    [[TMP29:%.*]] = shufflevector <8 x i32> [[TMP28]], <8 x i32> poison, <2 x i32> <i32 poison, i32 6>62; CHECK-NEXT:    [[TMP30:%.*]] = shufflevector <2 x i32> [[TMP29]], <2 x i32> <i32 0, i32 poison>, <2 x i32> <i32 2, i32 1>63; CHECK-NEXT:    br i1 [[TOBOOL14_NOT]], label %[[IF_END18]], label %[[Q]]64; CHECK:       [[Q]]:65; CHECK-NEXT:    [[U_4:%.*]] = phi i32 [ [[TMP20]], %[[P]] ], [ 0, %[[O]] ]66; CHECK-NEXT:    [[V_44:%.*]] = phi i8 [ [[TMP14]], %[[P]] ], [ 0, %[[O]] ]67; CHECK-NEXT:    [[TMP31:%.*]] = phi <2 x i32> [ [[TMP15]], %[[P]] ], [ [[TMP30]], %[[O]] ]68; CHECK-NEXT:    [[TMP32:%.*]] = shufflevector <2 x i32> [[TMP31]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>69; CHECK-NEXT:    [[CONV17:%.*]] = sext i8 [[V_44]] to i3270; CHECK-NEXT:    [[REM:%.*]] = mul i32 [[U_4]], [[CONV17]]71; CHECK-NEXT:    [[TMP33:%.*]] = insertelement <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 0, i32 poison, i32 0, i32 0>, i32 [[REM]], i32 572; CHECK-NEXT:    [[TMP38:%.*]] = shufflevector <4 x i32> [[TMP32]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>73; CHECK-NEXT:    [[TMP39:%.*]] = shufflevector <2 x i32> [[TMP31]], <2 x i32> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>74; CHECK-NEXT:    [[TMP40:%.*]] = shufflevector <8 x i32> [[TMP33]], <8 x i32> [[TMP39]], <8 x i32> <i32 8, i32 9, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>75; CHECK-NEXT:    br label %[[IF_END18]]76; CHECK:       [[IF_END18]]:77; CHECK-NEXT:    [[L_4]] = phi i8 [ 0, %[[Q]] ], [ [[L_3_PH]], %[[O]] ]78; CHECK-NEXT:    [[TMP35]] = phi <8 x i32> [ [[TMP40]], %[[Q]] ], [ [[TMP28]], %[[O]] ]79; CHECK-NEXT:    [[TMP36:%.*]] = shufflevector <8 x i32> [[TMP35]], <8 x i32> poison, <4 x i32> <i32 4, i32 poison, i32 poison, i32 poison>80; CHECK-NEXT:    [[TMP37]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> [[TMP36]], <4 x i32> <i32 4, i32 1, i32 2, i32 3>81; CHECK-NEXT:    br i1 [[TOBOOL14_NOT]], label %[[N]], label %[[P]]82;83entry:84  br label %n85 86entry.o_crit_edge:87  br label %o88 89n:90  %i.0 = phi i32 [ 0, %entry ], [ 1, %if.end18 ]91  %j.0 = phi i32 [ 0, %entry ], [ %j.6, %if.end18 ]92  %m.0 = phi i32 [ 0, %entry ], [ %m.4, %if.end18 ]93  %l.0 = phi i8 [ 0, %entry ], [ %l.4, %if.end18 ]94  %u.0 = phi i32 [ 0, %entry ], [ %u.5, %if.end18 ]95  store i32 %j.0, ptr %a, align 496  %cmp.not.not = icmp eq i8 %l.0, 097  br i1 %cmp.not.not, label %o.sink.split, label %p98 99p:100  %0 = phi i32 [ %r.3, %if.end18 ], [ 0, %n ]101  %i.1 = phi i32 [ %s.3, %if.end18 ], [ 1, %n ]102  %j.1 = phi i32 [ %j.65, %if.end18 ], [ %j.0, %n ]103  %k.1 = phi i32 [ %t.3, %if.end18 ], [ %i.0, %n ]104  %m.1 = phi i32 [ %m.46, %if.end18 ], [ %m.0, %n ]105  %l.1 = phi i8 [ 1, %if.end18 ], [ 0, %n ]106  %s.1 = phi i32 [ %s.3, %if.end18 ], [ 0, %n ]107  %t.1 = phi i32 [ %t.3, %if.end18 ], [ 0, %n ]108  %u.12 = phi i32 [ %u.5, %if.end18 ], [ 0, %n ]109  %v.1 = phi i8 [ 0, %if.end18 ], [ %v.5, %n ]110  %tobool4.not = icmp eq i32 %m.1, 0111  %spec.select = select i1 %tobool4.not, i32 %j.1, i32 0112  %tobool7.not = icmp eq i32 %0, 0113  br i1 %tobool7.not, label %o.sink.split, label %q114 115o.sink.split:116  %spec.select.sink = phi i32 [ %j.0, %n ], [ %spec.select, %p ]117  %i.3.ph = phi i32 [ 0, %n ], [ %i.1, %p ]118  %k.3.ph = phi i32 [ %i.0, %n ], [ %k.1, %p ]119  %m.3.ph = phi i32 [ %m.0, %n ], [ 0, %p ]120  %l.3.ph = phi i8 [ 0, %n ], [ %l.1, %p ]121  %u.3.ph = phi i32 [ %u.0, %n ], [ 1, %p ]122  %conv10 = zext i32 %spec.select.sink to i64123  %call11 = tail call i32 (ptr, ...) @printf(ptr null, i64 %conv10)124  br label %o125 126o:127  %j.4 = phi i32 [ 0, %entry.o_crit_edge ], [ %spec.select.sink, %o.sink.split ]128  %k.3 = phi i32 [ 0, %entry.o_crit_edge ], [ %k.3.ph, %o.sink.split ]129  %m.3 = phi i32 [ 0, %entry.o_crit_edge ], [ %m.3.ph, %o.sink.split ]130  %u.3 = phi i32 [ 0, %entry.o_crit_edge ], [ %u.3.ph, %o.sink.split ]131  %sub = sub i32 0, %j.6132  %div = sdiv i32 %sub, %i.3.ph133  %sub13 = sub i32 0, %div134  br i1 %tobool14.not, label %if.end18, label %q135 136q:137  %s.2 = phi i32 [ %s.1, %p ], [ 0, %o ]138  %t.2 = phi i32 [ %t.1, %p ], [ %k.3, %o ]139  %u.4 = phi i32 [ %u.12, %p ], [ 0, %o ]140  %v.44 = phi i8 [ %v.1, %p ], [ 0, %o ]141  %conv17 = sext i8 %v.44 to i32142  %rem = mul i32 %u.4, %conv17143  br label %if.end18144 145if.end18:146  %j.65 = phi i32 [ 0, %q ], [ %j.4, %o ]147  %m.46 = phi i32 [ %rem, %q ], [ %m.3, %o ]148  %l.4 = phi i8 [ 0, %q ], [ %l.3.ph, %o ]149  %r.3 = phi i32 [ 0, %q ], [ %k.3, %o ]150  %s.3 = phi i32 [ %s.2, %q ], [ %sub, %o ]151  %t.3 = phi i32 [ %t.2, %q ], [ %sub13, %o ]152  %u.5 = phi i32 [ 0, %q ], [ %u.3, %o ]153  br i1 %tobool14.not, label %n, label %p154 155}156declare i32 @printf(ptr, ...)157