119 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt -passes=loop-vectorize -mtriple=s390x -mcpu=z14 -S %s | FileCheck %s3 4define void @test(ptr %p, i40 %a) {5; CHECK-LABEL: define void @test(6; CHECK-SAME: ptr [[P:%.*]], i40 [[A:%.*]]) #[[ATTR0:[0-9]+]] {7; CHECK-NEXT: entry:8; CHECK-NEXT: br label [[VECTOR_PH:%.*]]9; CHECK: vector.ph:10; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]11; CHECK: vector.body:12; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF:%.*]], label [[PRED_STORE_CONTINUE:%.*]]13; CHECK: pred.store.if:14; CHECK-NEXT: store i1 false, ptr [[P]], align 115; CHECK-NEXT: br label [[PRED_STORE_CONTINUE]]16; CHECK: pred.store.continue:17; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF1:%.*]], label [[PRED_STORE_CONTINUE2:%.*]]18; CHECK: pred.store.if1:19; CHECK-NEXT: store i1 false, ptr [[P]], align 120; CHECK-NEXT: br label [[PRED_STORE_CONTINUE2]]21; CHECK: pred.store.continue2:22; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF3:%.*]], label [[PRED_STORE_CONTINUE4:%.*]]23; CHECK: pred.store.if3:24; CHECK-NEXT: store i1 false, ptr [[P]], align 125; CHECK-NEXT: br label [[PRED_STORE_CONTINUE4]]26; CHECK: pred.store.continue4:27; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF5:%.*]], label [[PRED_STORE_CONTINUE6:%.*]]28; CHECK: pred.store.if5:29; CHECK-NEXT: store i1 false, ptr [[P]], align 130; CHECK-NEXT: br label [[PRED_STORE_CONTINUE6]]31; CHECK: pred.store.continue6:32; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF7:%.*]], label [[PRED_STORE_CONTINUE8:%.*]]33; CHECK: pred.store.if7:34; CHECK-NEXT: store i1 false, ptr [[P]], align 135; CHECK-NEXT: br label [[PRED_STORE_CONTINUE8]]36; CHECK: pred.store.continue8:37; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF9:%.*]], label [[PRED_STORE_CONTINUE10:%.*]]38; CHECK: pred.store.if9:39; CHECK-NEXT: store i1 false, ptr [[P]], align 140; CHECK-NEXT: br label [[PRED_STORE_CONTINUE10]]41; CHECK: pred.store.continue10:42; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF11:%.*]], label [[PRED_STORE_CONTINUE12:%.*]]43; CHECK: pred.store.if11:44; CHECK-NEXT: store i1 false, ptr [[P]], align 145; CHECK-NEXT: br label [[PRED_STORE_CONTINUE12]]46; CHECK: pred.store.continue12:47; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF13:%.*]], label [[PRED_STORE_CONTINUE14:%.*]]48; CHECK: pred.store.if13:49; CHECK-NEXT: store i1 false, ptr [[P]], align 150; CHECK-NEXT: br label [[PRED_STORE_CONTINUE14]]51; CHECK: pred.store.continue14:52; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF15:%.*]], label [[PRED_STORE_CONTINUE16:%.*]]53; CHECK: pred.store.if15:54; CHECK-NEXT: store i1 false, ptr [[P]], align 155; CHECK-NEXT: br label [[PRED_STORE_CONTINUE16]]56; CHECK: pred.store.continue16:57; CHECK-NEXT: br i1 true, label [[PRED_STORE_IF17:%.*]], label [[PRED_STORE_CONTINUE18:%.*]]58; CHECK: pred.store.if17:59; CHECK-NEXT: store i1 false, ptr [[P]], align 160; CHECK-NEXT: br label [[PRED_STORE_CONTINUE18]]61; CHECK: pred.store.continue18:62; CHECK-NEXT: br i1 false, label [[PRED_STORE_IF19:%.*]], label [[PRED_STORE_CONTINUE20:%.*]]63; CHECK: pred.store.if19:64; CHECK-NEXT: store i1 false, ptr [[P]], align 165; CHECK-NEXT: br label [[PRED_STORE_CONTINUE20]]66; CHECK: pred.store.continue20:67; CHECK-NEXT: br i1 false, label [[PRED_STORE_IF21:%.*]], label [[PRED_STORE_CONTINUE22:%.*]]68; CHECK: pred.store.if21:69; CHECK-NEXT: store i1 false, ptr [[P]], align 170; CHECK-NEXT: br label [[PRED_STORE_CONTINUE22]]71; CHECK: pred.store.continue22:72; CHECK-NEXT: br i1 false, label [[PRED_STORE_IF23:%.*]], label [[PRED_STORE_CONTINUE24:%.*]]73; CHECK: pred.store.if23:74; CHECK-NEXT: store i1 false, ptr [[P]], align 175; CHECK-NEXT: br label [[PRED_STORE_CONTINUE24]]76; CHECK: pred.store.continue24:77; CHECK-NEXT: br i1 false, label [[PRED_STORE_IF25:%.*]], label [[PRED_STORE_CONTINUE26:%.*]]78; CHECK: pred.store.if25:79; CHECK-NEXT: store i1 false, ptr [[P]], align 180; CHECK-NEXT: br label [[PRED_STORE_CONTINUE26]]81; CHECK: pred.store.continue26:82; CHECK-NEXT: br i1 false, label [[PRED_STORE_IF27:%.*]], label [[PRED_STORE_CONTINUE28:%.*]]83; CHECK: pred.store.if27:84; CHECK-NEXT: store i1 false, ptr [[P]], align 185; CHECK-NEXT: br label [[PRED_STORE_CONTINUE28]]86; CHECK: pred.store.continue28:87; CHECK-NEXT: br i1 false, label [[PRED_STORE_IF29:%.*]], label [[PRED_STORE_CONTINUE30:%.*]]88; CHECK: pred.store.if29:89; CHECK-NEXT: store i1 false, ptr [[P]], align 190; CHECK-NEXT: br label [[PRED_STORE_CONTINUE30]]91; CHECK: pred.store.continue30:92; CHECK-NEXT: br label [[MIDDLE_BLOCK:%.*]]93; CHECK: middle.block:94; CHECK-NEXT: br label [[FOR_BODY:%.*]]95; CHECK: exit:96; CHECK-NEXT: ret void97;98entry:99 br label %for.body100 101for.body: ; preds = %for.body, %entry102 %iv = phi i32 [ 0, %entry ], [ %iv.next, %for.body ]103 %shl = shl i40 %a, 24104 %ashr = ashr i40 %shl, 28105 %trunc = trunc i40 %ashr to i32106 %icmp.eq = icmp eq i32 %trunc, 0107 %zext = zext i1 %icmp.eq to i32108 %icmp.ult = icmp ult i32 0, %zext109 %or = or i1 %icmp.ult, true110 %icmp.sgt = icmp sgt i1 %or, false111 store i1 %icmp.sgt, ptr %p, align 1112 %iv.next = add i32 %iv, 1113 %cond = icmp ult i32 %iv.next, 10114 br i1 %cond, label %for.body, label %exit115 116exit: ; preds = %for.body117 ret void118}119