brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.9 KiB · f6e5b0b Raw
626 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -O2 -S < %s | FileCheck %s3 4target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64--"6 7define float @test_merge_allof_v4sf(<4 x float> %t) {8; CHECK-LABEL: @test_merge_allof_v4sf(9; CHECK-NEXT:  entry:10; CHECK-NEXT:    [[T_FR:%.*]] = freeze <4 x float> [[T:%.*]]11; CHECK-NEXT:    [[TMP0:%.*]] = fcmp uge <4 x float> [[T_FR]], zeroinitializer12; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i1> [[TMP0]] to i413; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i4 [[TMP1]], 014; CHECK-NEXT:    [[TMP3:%.*]] = fcmp ule <4 x float> [[T_FR]], splat (float 1.000000e+00)15; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i1> [[TMP3]] to i416; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i4 [[TMP4]], 017; CHECK-NEXT:    [[OR_COND:%.*]] = or i1 [[TMP2]], [[TMP5]]18; CHECK-NEXT:    [[SHIFT:%.*]] = shufflevector <4 x float> [[T_FR]], <4 x float> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>19; CHECK-NEXT:    [[TMP6:%.*]] = fadd <4 x float> [[T_FR]], [[SHIFT]]20; CHECK-NEXT:    [[ADD:%.*]] = extractelement <4 x float> [[TMP6]], i64 021; CHECK-NEXT:    [[RETVAL_0:%.*]] = select i1 [[OR_COND]], float 0.000000e+00, float [[ADD]]22; CHECK-NEXT:    ret float [[RETVAL_0]]23;24entry:25  %vecext = extractelement <4 x float> %t, i32 026  %conv = fpext float %vecext to double27  %cmp = fcmp olt double %conv, 0.000000e+0028  br i1 %cmp, label %land.lhs.true, label %lor.lhs.false29 30land.lhs.true:31  %vecext2 = extractelement <4 x float> %t, i32 132  %conv3 = fpext float %vecext2 to double33  %cmp4 = fcmp olt double %conv3, 0.000000e+0034  br i1 %cmp4, label %land.lhs.true6, label %lor.lhs.false35 36land.lhs.true6:37  %vecext7 = extractelement <4 x float> %t, i32 238  %conv8 = fpext float %vecext7 to double39  %cmp9 = fcmp olt double %conv8, 0.000000e+0040  br i1 %cmp9, label %land.lhs.true11, label %lor.lhs.false41 42land.lhs.true11:43  %vecext12 = extractelement <4 x float> %t, i32 344  %conv13 = fpext float %vecext12 to double45  %cmp14 = fcmp olt double %conv13, 0.000000e+0046  br i1 %cmp14, label %if.then, label %lor.lhs.false47 48lor.lhs.false:49  %vecext16 = extractelement <4 x float> %t, i32 050  %conv17 = fpext float %vecext16 to double51  %cmp18 = fcmp ogt double %conv17, 1.000000e+0052  br i1 %cmp18, label %land.lhs.true20, label %if.end53 54land.lhs.true20:55  %vecext21 = extractelement <4 x float> %t, i32 156  %conv22 = fpext float %vecext21 to double57  %cmp23 = fcmp ogt double %conv22, 1.000000e+0058  br i1 %cmp23, label %land.lhs.true25, label %if.end59 60land.lhs.true25:61  %vecext26 = extractelement <4 x float> %t, i32 262  %conv27 = fpext float %vecext26 to double63  %cmp28 = fcmp ogt double %conv27, 1.000000e+0064  br i1 %cmp28, label %land.lhs.true30, label %if.end65 66land.lhs.true30:67  %vecext31 = extractelement <4 x float> %t, i32 368  %conv32 = fpext float %vecext31 to double69  %cmp33 = fcmp ogt double %conv32, 1.000000e+0070  br i1 %cmp33, label %if.then, label %if.end71 72if.then:73  br label %return74 75if.end:76  %vecext35 = extractelement <4 x float> %t, i32 077  %vecext36 = extractelement <4 x float> %t, i32 178  %add = fadd float %vecext35, %vecext3679  br label %return80 81return:82  %retval.0 = phi float [ 0.000000e+00, %if.then ], [ %add, %if.end ]83  ret float %retval.084}85 86define float @test_merge_anyof_v4sf(<4 x float> %t) {87; CHECK-LABEL: @test_merge_anyof_v4sf(88; CHECK-NEXT:  entry:89; CHECK-NEXT:    [[T:%.*]] = freeze <4 x float> [[T1:%.*]]90; CHECK-NEXT:    [[TMP0:%.*]] = fcmp olt <4 x float> [[T]], zeroinitializer91; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt <4 x float> [[T]], splat (float 1.000000e+00)92; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i1> [[TMP1]], <4 x i1> [[TMP0]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>93; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <8 x i1> [[TMP3]] to i894; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp eq i8 [[TMP5]], 095; CHECK-NEXT:    [[SHIFT:%.*]] = shufflevector <4 x float> [[T]], <4 x float> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>96; CHECK-NEXT:    [[TMP6:%.*]] = fadd <4 x float> [[T]], [[SHIFT]]97; CHECK-NEXT:    [[ADD:%.*]] = extractelement <4 x float> [[TMP6]], i64 098; CHECK-NEXT:    [[RETVAL_0:%.*]] = select i1 [[DOTNOT]], float [[ADD]], float 0.000000e+0099; CHECK-NEXT:    ret float [[RETVAL_0]]100;101entry:102  %vecext = extractelement <4 x float> %t, i32 0103  %conv = fpext float %vecext to double104  %cmp = fcmp olt double %conv, 0.000000e+00105  br i1 %cmp, label %if.then, label %lor.lhs.false106 107lor.lhs.false:108  %vecext2 = extractelement <4 x float> %t, i32 1109  %conv3 = fpext float %vecext2 to double110  %cmp4 = fcmp olt double %conv3, 0.000000e+00111  br i1 %cmp4, label %if.then, label %lor.lhs.false6112 113lor.lhs.false6:114  %vecext7 = extractelement <4 x float> %t, i32 2115  %conv8 = fpext float %vecext7 to double116  %cmp9 = fcmp olt double %conv8, 0.000000e+00117  br i1 %cmp9, label %if.then, label %lor.lhs.false11118 119lor.lhs.false11:120  %vecext12 = extractelement <4 x float> %t, i32 3121  %conv13 = fpext float %vecext12 to double122  %cmp14 = fcmp olt double %conv13, 0.000000e+00123  br i1 %cmp14, label %if.then, label %lor.lhs.false16124 125lor.lhs.false16:126  %vecext17 = extractelement <4 x float> %t, i32 0127  %conv18 = fpext float %vecext17 to double128  %cmp19 = fcmp ogt double %conv18, 1.000000e+00129  br i1 %cmp19, label %if.then, label %lor.lhs.false21130 131lor.lhs.false21:132  %vecext22 = extractelement <4 x float> %t, i32 1133  %conv23 = fpext float %vecext22 to double134  %cmp24 = fcmp ogt double %conv23, 1.000000e+00135  br i1 %cmp24, label %if.then, label %lor.lhs.false26136 137lor.lhs.false26:138  %vecext27 = extractelement <4 x float> %t, i32 2139  %conv28 = fpext float %vecext27 to double140  %cmp29 = fcmp ogt double %conv28, 1.000000e+00141  br i1 %cmp29, label %if.then, label %lor.lhs.false31142 143lor.lhs.false31:144  %vecext32 = extractelement <4 x float> %t, i32 3145  %conv33 = fpext float %vecext32 to double146  %cmp34 = fcmp ogt double %conv33, 1.000000e+00147  br i1 %cmp34, label %if.then, label %if.end148 149if.then:150  br label %return151 152if.end:153  %vecext36 = extractelement <4 x float> %t, i32 0154  %vecext37 = extractelement <4 x float> %t, i32 1155  %add = fadd float %vecext36, %vecext37156  br label %return157 158return:159  %retval.0 = phi float [ 0.000000e+00, %if.then ], [ %add, %if.end ]160  ret float %retval.0161}162 163define float @test_separate_allof_v4sf(<4 x float> %t) {164; CHECK-LABEL: @test_separate_allof_v4sf(165; CHECK-NEXT:  entry:166; CHECK-NEXT:    [[T_FR:%.*]] = freeze <4 x float> [[T:%.*]]167; CHECK-NEXT:    [[TMP0:%.*]] = fcmp uge <4 x float> [[T_FR]], zeroinitializer168; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i1> [[TMP0]] to i4169; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i4 [[TMP1]], 0170; CHECK-NEXT:    [[TMP3:%.*]] = fcmp ule <4 x float> [[T_FR]], splat (float 1.000000e+00)171; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i1> [[TMP3]] to i4172; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i4 [[TMP4]], 0173; CHECK-NEXT:    [[OR_COND:%.*]] = or i1 [[TMP2]], [[TMP5]]174; CHECK-NEXT:    [[SHIFT:%.*]] = shufflevector <4 x float> [[T_FR]], <4 x float> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>175; CHECK-NEXT:    [[TMP6:%.*]] = fadd <4 x float> [[T_FR]], [[SHIFT]]176; CHECK-NEXT:    [[ADD:%.*]] = extractelement <4 x float> [[TMP6]], i64 0177; CHECK-NEXT:    [[RETVAL_0:%.*]] = select i1 [[OR_COND]], float 0.000000e+00, float [[ADD]]178; CHECK-NEXT:    ret float [[RETVAL_0]]179;180entry:181  %vecext = extractelement <4 x float> %t, i32 0182  %conv = fpext float %vecext to double183  %cmp = fcmp olt double %conv, 0.000000e+00184  br i1 %cmp, label %land.lhs.true, label %if.end185 186land.lhs.true:187  %vecext2 = extractelement <4 x float> %t, i32 1188  %conv3 = fpext float %vecext2 to double189  %cmp4 = fcmp olt double %conv3, 0.000000e+00190  br i1 %cmp4, label %land.lhs.true6, label %if.end191 192land.lhs.true6:193  %vecext7 = extractelement <4 x float> %t, i32 2194  %conv8 = fpext float %vecext7 to double195  %cmp9 = fcmp olt double %conv8, 0.000000e+00196  br i1 %cmp9, label %land.lhs.true11, label %if.end197 198land.lhs.true11:199  %vecext12 = extractelement <4 x float> %t, i32 3200  %conv13 = fpext float %vecext12 to double201  %cmp14 = fcmp olt double %conv13, 0.000000e+00202  br i1 %cmp14, label %if.then, label %if.end203 204if.then:205  br label %return206 207if.end:208  %vecext16 = extractelement <4 x float> %t, i32 0209  %conv17 = fpext float %vecext16 to double210  %cmp18 = fcmp ogt double %conv17, 1.000000e+00211  br i1 %cmp18, label %land.lhs.true20, label %if.end36212 213land.lhs.true20:214  %vecext21 = extractelement <4 x float> %t, i32 1215  %conv22 = fpext float %vecext21 to double216  %cmp23 = fcmp ogt double %conv22, 1.000000e+00217  br i1 %cmp23, label %land.lhs.true25, label %if.end36218 219land.lhs.true25:220  %vecext26 = extractelement <4 x float> %t, i32 2221  %conv27 = fpext float %vecext26 to double222  %cmp28 = fcmp ogt double %conv27, 1.000000e+00223  br i1 %cmp28, label %land.lhs.true30, label %if.end36224 225land.lhs.true30:226  %vecext31 = extractelement <4 x float> %t, i32 3227  %conv32 = fpext float %vecext31 to double228  %cmp33 = fcmp ogt double %conv32, 1.000000e+00229  br i1 %cmp33, label %if.then35, label %if.end36230 231if.then35:232  br label %return233 234if.end36:235  %vecext37 = extractelement <4 x float> %t, i32 0236  %vecext38 = extractelement <4 x float> %t, i32 1237  %add = fadd float %vecext37, %vecext38238  br label %return239 240return:241  %retval.0 = phi float [ 0.000000e+00, %if.then ], [ 0.000000e+00, %if.then35 ], [ %add, %if.end36 ]242  ret float %retval.0243}244 245define float @test_separate_anyof_v4sf(<4 x float> %t) {246; CHECK-LABEL: @test_separate_anyof_v4sf(247; CHECK-NEXT:  entry:248; CHECK-NEXT:    [[T_FR:%.*]] = freeze <4 x float> [[T:%.*]]249; CHECK-NEXT:    [[TMP0:%.*]] = fcmp olt <4 x float> [[T_FR]], zeroinitializer250; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i1> [[TMP0]] to i4251; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp eq i4 [[TMP1]], 0252; CHECK-NEXT:    [[TMP2:%.*]] = fcmp ogt <4 x float> [[T_FR]], splat (float 1.000000e+00)253; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i1> [[TMP2]] to i4254; CHECK-NEXT:    [[DOTNOT6:%.*]] = icmp eq i4 [[TMP3]], 0255; CHECK-NEXT:    [[OR_COND:%.*]] = and i1 [[DOTNOT]], [[DOTNOT6]]256; CHECK-NEXT:    [[SHIFT:%.*]] = shufflevector <4 x float> [[T_FR]], <4 x float> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>257; CHECK-NEXT:    [[TMP4:%.*]] = fadd <4 x float> [[T_FR]], [[SHIFT]]258; CHECK-NEXT:    [[ADD:%.*]] = extractelement <4 x float> [[TMP4]], i64 0259; CHECK-NEXT:    [[RETVAL_0:%.*]] = select i1 [[OR_COND]], float [[ADD]], float 0.000000e+00260; CHECK-NEXT:    ret float [[RETVAL_0]]261;262entry:263  %vecext = extractelement <4 x float> %t, i32 0264  %conv = fpext float %vecext to double265  %cmp = fcmp olt double %conv, 0.000000e+00266  br i1 %cmp, label %if.then, label %lor.lhs.false267 268lor.lhs.false:269  %vecext2 = extractelement <4 x float> %t, i32 1270  %conv3 = fpext float %vecext2 to double271  %cmp4 = fcmp olt double %conv3, 0.000000e+00272  br i1 %cmp4, label %if.then, label %lor.lhs.false6273 274lor.lhs.false6:275  %vecext7 = extractelement <4 x float> %t, i32 2276  %conv8 = fpext float %vecext7 to double277  %cmp9 = fcmp olt double %conv8, 0.000000e+00278  br i1 %cmp9, label %if.then, label %lor.lhs.false11279 280lor.lhs.false11:281  %vecext12 = extractelement <4 x float> %t, i32 3282  %conv13 = fpext float %vecext12 to double283  %cmp14 = fcmp olt double %conv13, 0.000000e+00284  br i1 %cmp14, label %if.then, label %if.end285 286if.then:287  br label %return288 289if.end:290  %vecext16 = extractelement <4 x float> %t, i32 0291  %conv17 = fpext float %vecext16 to double292  %cmp18 = fcmp ogt double %conv17, 1.000000e+00293  br i1 %cmp18, label %if.then35, label %lor.lhs.false20294 295lor.lhs.false20:296  %vecext21 = extractelement <4 x float> %t, i32 1297  %conv22 = fpext float %vecext21 to double298  %cmp23 = fcmp ogt double %conv22, 1.000000e+00299  br i1 %cmp23, label %if.then35, label %lor.lhs.false25300 301lor.lhs.false25:302  %vecext26 = extractelement <4 x float> %t, i32 2303  %conv27 = fpext float %vecext26 to double304  %cmp28 = fcmp ogt double %conv27, 1.000000e+00305  br i1 %cmp28, label %if.then35, label %lor.lhs.false30306 307lor.lhs.false30:308  %vecext31 = extractelement <4 x float> %t, i32 3309  %conv32 = fpext float %vecext31 to double310  %cmp33 = fcmp ogt double %conv32, 1.000000e+00311  br i1 %cmp33, label %if.then35, label %if.end36312 313if.then35:314  br label %return315 316if.end36:317  %vecext37 = extractelement <4 x float> %t, i32 0318  %vecext38 = extractelement <4 x float> %t, i32 1319  %add = fadd float %vecext37, %vecext38320  br label %return321 322return:323  %retval.0 = phi float [ 0.000000e+00, %if.then ], [ 0.000000e+00, %if.then35 ], [ %add, %if.end36 ]324  ret float %retval.0325}326 327define float @test_merge_allof_v4si(<4 x i32> %t) {328; CHECK-LABEL: @test_merge_allof_v4si(329; CHECK-NEXT:  entry:330; CHECK-NEXT:    [[T_FR:%.*]] = freeze <4 x i32> [[T:%.*]]331; CHECK-NEXT:    [[TMP0:%.*]] = icmp sgt <4 x i32> [[T_FR]], zeroinitializer332; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i1> [[TMP0]] to i4333; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i4 [[TMP1]], 0334; CHECK-NEXT:    [[TMP3:%.*]] = icmp slt <4 x i32> [[T_FR]], splat (i32 256)335; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i1> [[TMP3]] to i4336; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i4 [[TMP4]], 0337; CHECK-NEXT:    [[OR_COND:%.*]] = or i1 [[TMP2]], [[TMP5]]338; CHECK-NEXT:    [[SHIFT:%.*]] = shufflevector <4 x i32> [[T_FR]], <4 x i32> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>339; CHECK-NEXT:    [[TMP6:%.*]] = add nsw <4 x i32> [[T_FR]], [[SHIFT]]340; CHECK-NEXT:    [[ADD:%.*]] = extractelement <4 x i32> [[TMP6]], i64 0341; CHECK-NEXT:    [[CONV:%.*]] = sitofp i32 [[ADD]] to float342; CHECK-NEXT:    [[RETVAL_0:%.*]] = select i1 [[OR_COND]], float 0.000000e+00, float [[CONV]]343; CHECK-NEXT:    ret float [[RETVAL_0]]344;345entry:346  %vecext = extractelement <4 x i32> %t, i32 0347  %cmp = icmp slt i32 %vecext, 1348  br i1 %cmp, label %land.lhs.true, label %lor.lhs.false349 350land.lhs.true:351  %vecext1 = extractelement <4 x i32> %t, i32 1352  %cmp2 = icmp slt i32 %vecext1, 1353  br i1 %cmp2, label %land.lhs.true3, label %lor.lhs.false354 355land.lhs.true3:356  %vecext4 = extractelement <4 x i32> %t, i32 2357  %cmp5 = icmp slt i32 %vecext4, 1358  br i1 %cmp5, label %land.lhs.true6, label %lor.lhs.false359 360land.lhs.true6:361  %vecext7 = extractelement <4 x i32> %t, i32 3362  %cmp8 = icmp slt i32 %vecext7, 1363  br i1 %cmp8, label %if.then, label %lor.lhs.false364 365lor.lhs.false:366  %vecext9 = extractelement <4 x i32> %t, i32 0367  %cmp10 = icmp sgt i32 %vecext9, 255368  br i1 %cmp10, label %land.lhs.true11, label %if.end369 370land.lhs.true11:371  %vecext12 = extractelement <4 x i32> %t, i32 1372  %cmp13 = icmp sgt i32 %vecext12, 255373  br i1 %cmp13, label %land.lhs.true14, label %if.end374 375land.lhs.true14:376  %vecext15 = extractelement <4 x i32> %t, i32 2377  %cmp16 = icmp sgt i32 %vecext15, 255378  br i1 %cmp16, label %land.lhs.true17, label %if.end379 380land.lhs.true17:381  %vecext18 = extractelement <4 x i32> %t, i32 3382  %cmp19 = icmp sgt i32 %vecext18, 255383  br i1 %cmp19, label %if.then, label %if.end384 385if.then:386  br label %return387 388if.end:389  %vecext20 = extractelement <4 x i32> %t, i32 0390  %vecext21 = extractelement <4 x i32> %t, i32 1391  %add = add nsw i32 %vecext20, %vecext21392  %conv = sitofp i32 %add to float393  br label %return394 395return:396  %retval.0 = phi float [ 0.000000e+00, %if.then ], [ %conv, %if.end ]397  ret float %retval.0398}399 400define float @test_merge_anyof_v4si(<4 x i32> %t) {401; CHECK-LABEL: @test_merge_anyof_v4si(402; CHECK-NEXT:  entry:403; CHECK-NEXT:    [[T:%.*]] = freeze <4 x i32> [[T1:%.*]]404; CHECK-NEXT:    [[TMP0:%.*]] = icmp slt <4 x i32> [[T]], splat (i32 1)405; CHECK-NEXT:    [[TMP1:%.*]] = icmp sgt <4 x i32> [[T]], splat (i32 255)406; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i1> [[TMP1]], <4 x i1> [[TMP0]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>407; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <8 x i1> [[TMP3]] to i8408; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp eq i8 [[TMP5]], 0409; CHECK-NEXT:    [[SHIFT:%.*]] = shufflevector <4 x i32> [[T]], <4 x i32> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>410; CHECK-NEXT:    [[TMP6:%.*]] = add nsw <4 x i32> [[T]], [[SHIFT]]411; CHECK-NEXT:    [[ADD:%.*]] = extractelement <4 x i32> [[TMP6]], i64 0412; CHECK-NEXT:    [[CONV:%.*]] = sitofp i32 [[ADD]] to float413; CHECK-NEXT:    [[RETVAL_0:%.*]] = select i1 [[DOTNOT]], float [[CONV]], float 0.000000e+00414; CHECK-NEXT:    ret float [[RETVAL_0]]415;416entry:417  %vecext = extractelement <4 x i32> %t, i32 0418  %cmp = icmp slt i32 %vecext, 1419  br i1 %cmp, label %if.then, label %lor.lhs.false420 421lor.lhs.false:422  %vecext1 = extractelement <4 x i32> %t, i32 1423  %cmp2 = icmp slt i32 %vecext1, 1424  br i1 %cmp2, label %if.then, label %lor.lhs.false3425 426lor.lhs.false3:427  %vecext4 = extractelement <4 x i32> %t, i32 2428  %cmp5 = icmp slt i32 %vecext4, 1429  br i1 %cmp5, label %if.then, label %lor.lhs.false6430 431lor.lhs.false6:432  %vecext7 = extractelement <4 x i32> %t, i32 3433  %cmp8 = icmp slt i32 %vecext7, 1434  br i1 %cmp8, label %if.then, label %lor.lhs.false9435 436lor.lhs.false9:437  %vecext10 = extractelement <4 x i32> %t, i32 0438  %cmp11 = icmp sgt i32 %vecext10, 255439  br i1 %cmp11, label %if.then, label %lor.lhs.false12440 441lor.lhs.false12:442  %vecext13 = extractelement <4 x i32> %t, i32 1443  %cmp14 = icmp sgt i32 %vecext13, 255444  br i1 %cmp14, label %if.then, label %lor.lhs.false15445 446lor.lhs.false15:447  %vecext16 = extractelement <4 x i32> %t, i32 2448  %cmp17 = icmp sgt i32 %vecext16, 255449  br i1 %cmp17, label %if.then, label %lor.lhs.false18450 451lor.lhs.false18:452  %vecext19 = extractelement <4 x i32> %t, i32 3453  %cmp20 = icmp sgt i32 %vecext19, 255454  br i1 %cmp20, label %if.then, label %if.end455 456if.then:457  br label %return458 459if.end:460  %vecext21 = extractelement <4 x i32> %t, i32 0461  %vecext22 = extractelement <4 x i32> %t, i32 1462  %add = add nsw i32 %vecext21, %vecext22463  %conv = sitofp i32 %add to float464  br label %return465 466return:467  %retval.0 = phi float [ 0.000000e+00, %if.then ], [ %conv, %if.end ]468  ret float %retval.0469}470 471define i32 @test_separate_allof_v4si(<4 x i32> %t) {472; CHECK-LABEL: @test_separate_allof_v4si(473; CHECK-NEXT:  entry:474; CHECK-NEXT:    [[T_FR:%.*]] = freeze <4 x i32> [[T:%.*]]475; CHECK-NEXT:    [[TMP0:%.*]] = icmp sgt <4 x i32> [[T_FR]], zeroinitializer476; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i1> [[TMP0]] to i4477; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i4 [[TMP1]], 0478; CHECK-NEXT:    br i1 [[TMP2]], label [[RETURN:%.*]], label [[IF_END:%.*]]479; CHECK:       if.end:480; CHECK-NEXT:    [[TMP3:%.*]] = icmp slt <4 x i32> [[T_FR]], splat (i32 256)481; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i1> [[TMP3]] to i4482; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i4 [[TMP4]], 0483; CHECK-NEXT:    [[SHIFT:%.*]] = shufflevector <4 x i32> [[T_FR]], <4 x i32> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>484; CHECK-NEXT:    [[TMP6:%.*]] = add nsw <4 x i32> [[T_FR]], [[SHIFT]]485; CHECK-NEXT:    [[ADD:%.*]] = extractelement <4 x i32> [[TMP6]], i64 0486; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[TMP5]], i32 0, i32 [[ADD]]487; CHECK-NEXT:    br label [[RETURN]]488; CHECK:       return:489; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[SPEC_SELECT]], [[IF_END]] ]490; CHECK-NEXT:    ret i32 [[RETVAL_0]]491;492entry:493  %vecext = extractelement <4 x i32> %t, i32 0494  %cmp = icmp slt i32 %vecext, 1495  br i1 %cmp, label %land.lhs.true, label %if.end496 497land.lhs.true:498  %vecext1 = extractelement <4 x i32> %t, i32 1499  %cmp2 = icmp slt i32 %vecext1, 1500  br i1 %cmp2, label %land.lhs.true3, label %if.end501 502land.lhs.true3:503  %vecext4 = extractelement <4 x i32> %t, i32 2504  %cmp5 = icmp slt i32 %vecext4, 1505  br i1 %cmp5, label %land.lhs.true6, label %if.end506 507land.lhs.true6:508  %vecext7 = extractelement <4 x i32> %t, i32 3509  %cmp8 = icmp slt i32 %vecext7, 1510  br i1 %cmp8, label %if.then, label %if.end511 512if.then:513  br label %return514 515if.end:516  %vecext9 = extractelement <4 x i32> %t, i32 0517  %cmp10 = icmp sgt i32 %vecext9, 255518  br i1 %cmp10, label %land.lhs.true11, label %if.end21519 520land.lhs.true11:521  %vecext12 = extractelement <4 x i32> %t, i32 1522  %cmp13 = icmp sgt i32 %vecext12, 255523  br i1 %cmp13, label %land.lhs.true14, label %if.end21524 525land.lhs.true14:526  %vecext15 = extractelement <4 x i32> %t, i32 2527  %cmp16 = icmp sgt i32 %vecext15, 255528  br i1 %cmp16, label %land.lhs.true17, label %if.end21529 530land.lhs.true17:531  %vecext18 = extractelement <4 x i32> %t, i32 3532  %cmp19 = icmp sgt i32 %vecext18, 255533  br i1 %cmp19, label %if.then20, label %if.end21534 535if.then20:536  br label %return537 538if.end21:539  %vecext22 = extractelement <4 x i32> %t, i32 0540  %vecext23 = extractelement <4 x i32> %t, i32 1541  %add = add nsw i32 %vecext22, %vecext23542  br label %return543 544return:545  %retval.0 = phi i32 [ 0, %if.then ], [ 0, %if.then20 ], [ %add, %if.end21 ]546  ret i32 %retval.0547}548 549define i32 @test_separate_anyof_v4si(<4 x i32> %t) {550; CHECK-LABEL: @test_separate_anyof_v4si(551; CHECK-NEXT:  entry:552; CHECK-NEXT:    [[T_FR:%.*]] = freeze <4 x i32> [[T:%.*]]553; CHECK-NEXT:    [[TMP0:%.*]] = icmp slt <4 x i32> [[T_FR]], splat (i32 1)554; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i1> [[TMP0]] to i4555; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp eq i4 [[TMP1]], 0556; CHECK-NEXT:    br i1 [[DOTNOT]], label [[IF_END:%.*]], label [[RETURN:%.*]]557; CHECK:       if.end:558; CHECK-NEXT:    [[TMP2:%.*]] = icmp ugt <4 x i32> [[T_FR]], splat (i32 255)559; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i1> [[TMP2]] to i4560; CHECK-NEXT:    [[DOTNOT6:%.*]] = icmp eq i4 [[TMP3]], 0561; CHECK-NEXT:    [[SHIFT:%.*]] = shufflevector <4 x i32> [[T_FR]], <4 x i32> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>562; CHECK-NEXT:    [[TMP4:%.*]] = add nuw nsw <4 x i32> [[T_FR]], [[SHIFT]]563; CHECK-NEXT:    [[ADD:%.*]] = extractelement <4 x i32> [[TMP4]], i64 0564; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[DOTNOT6]], i32 [[ADD]], i32 0565; CHECK-NEXT:    br label [[RETURN]]566; CHECK:       return:567; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[SPEC_SELECT]], [[IF_END]] ]568; CHECK-NEXT:    ret i32 [[RETVAL_0]]569;570entry:571  %vecext = extractelement <4 x i32> %t, i32 0572  %cmp = icmp slt i32 %vecext, 1573  br i1 %cmp, label %if.then, label %lor.lhs.false574 575lor.lhs.false:576  %vecext1 = extractelement <4 x i32> %t, i32 1577  %cmp2 = icmp slt i32 %vecext1, 1578  br i1 %cmp2, label %if.then, label %lor.lhs.false3579 580lor.lhs.false3:581  %vecext4 = extractelement <4 x i32> %t, i32 2582  %cmp5 = icmp slt i32 %vecext4, 1583  br i1 %cmp5, label %if.then, label %lor.lhs.false6584 585lor.lhs.false6:586  %vecext7 = extractelement <4 x i32> %t, i32 3587  %cmp8 = icmp slt i32 %vecext7, 1588  br i1 %cmp8, label %if.then, label %if.end589 590if.then:591  br label %return592 593if.end:594  %vecext9 = extractelement <4 x i32> %t, i32 0595  %cmp10 = icmp sgt i32 %vecext9, 255596  br i1 %cmp10, label %if.then20, label %lor.lhs.false11597 598lor.lhs.false11:599  %vecext12 = extractelement <4 x i32> %t, i32 1600  %cmp13 = icmp sgt i32 %vecext12, 255601  br i1 %cmp13, label %if.then20, label %lor.lhs.false14602 603lor.lhs.false14:604  %vecext15 = extractelement <4 x i32> %t, i32 2605  %cmp16 = icmp sgt i32 %vecext15, 255606  br i1 %cmp16, label %if.then20, label %lor.lhs.false17607 608lor.lhs.false17:609  %vecext18 = extractelement <4 x i32> %t, i32 3610  %cmp19 = icmp sgt i32 %vecext18, 255611  br i1 %cmp19, label %if.then20, label %if.end21612 613if.then20:614  br label %return615 616if.end21:617  %vecext22 = extractelement <4 x i32> %t, i32 0618  %vecext23 = extractelement <4 x i32> %t, i32 1619  %add = add nsw i32 %vecext22, %vecext23620  br label %return621 622return:623  %retval.0 = phi i32 [ 0, %if.then ], [ 0, %if.then20 ], [ %add, %if.end21 ]624  ret i32 %retval.0625}626