brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · cf85f26 Raw
140 lines · plain
1; REQUIRES: asserts2; RUN: opt -p loop-vectorize -force-vector-width=2 -force-vector-interleave=1 -debug -disable-output %s 2>&1 | FileCheck %s3 4define void @switch4_default_common_dest_with_case(ptr %start, ptr %end) {5; CHECK:      VPlan 'Final VPlan for VF={2},UF={1}' {6; CHECK-NEXT: ir<%0> = original trip-count7; CHECK-EMPTY:8; CHECK-NEXT: ir-bb<entry>:9; CHECK-NEXT:  IR %start2 = ptrtoint ptr %start to i6410; CHECK-NEXT:  IR %end1 = ptrtoint ptr %end to i6411; CHECK-NEXT:  IR %0 = sub i64 %end1, %start212; CHECK-NEXT:  EMIT vp<%min.iters.check> = icmp ult ir<%0>, ir<2>13; CHECK-NEXT:  EMIT branch-on-cond vp<%min.iters.check>14; CHECK-NEXT: Successor(s): ir-bb<scalar.ph>, vector.ph15; CHECK-EMPTY:16; CHECK-NEXT: vector.ph:17; CHECK-NEXT:   EMIT vp<%n.mod.vf> = urem ir<%0>, ir<2>18; CHECK-NEXT:   EMIT vp<[[VTC:%.+]]> = sub ir<%0>, vp<%n.mod.vf>19; CHECK-NEXT:   vp<[[END:%.+]]> = DERIVED-IV ir<%start> + vp<[[VTC]]> * ir<1>20; CHECK-NEXT: Successor(s): vector.body21; CHECK-EMPTY:22; CHECK-NEXT: vector.body:23; CHECK-NEXT:   EMIT-SCALAR vp<[[CAN_IV:%.+]]> = phi [ ir<0>, vector.ph ], [ vp<[[CAN_IV_NEXT:%.+]]>, default.2 ]24; CHECK-NEXT:   vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>, ir<2>25; CHECK-NEXT:   EMIT vp<[[STEP1:%.+]]> = extractelement vp<[[STEPS]]>, ir<0>26; CHECK-NEXT:   EMIT vp<[[PTR:%.+]]> = ptradd ir<%start>, vp<[[STEP1]]>27; CHECK-NEXT:   EMIT vp<[[STEP2:%.+]]> = extractelement vp<[[STEPS]]>, ir<1>28; CHECK-NEXT:   EMIT vp<[[PTR]]>.1 = ptradd ir<%start>, vp<[[STEP2]]>29; CHECK-NEXT:   EMIT vp<[[PTR_VEC:%.+]]> = buildvector vp<[[PTR]]>, vp<[[PTR]]>.130; CHECK-NEXT:   WIDEN ir<%l> = load vp<[[PTR]]>31; CHECK-NEXT:   EMIT vp<[[C1:%.+]]> = icmp eq ir<%l>, ir<-12>32; CHECK-NEXT:   EMIT vp<[[C2:%.+]]> = icmp eq ir<%l>, ir<13>33; CHECK-NEXT:   EMIT vp<[[OR_CASES:%.+]]> = or vp<[[C1]]>, vp<[[C2]]>34; CHECK-NEXT:   EMIT vp<[[DEFAULT_MASK:%.+]]> = not vp<[[OR_CASES]]>35; CHECK-NEXT: Successor(s): pred.store36; CHECK-EMPTY:37; CHECK-NEXT: <xVFxUF> pred.store: {38; CHECK-NEXT:   pred.store.entry:39; CHECK-NEXT:     BRANCH-ON-MASK vp<[[C2]]>40; CHECK-NEXT:   Successor(s): pred.store.if, pred.store.continue41; CHECK-EMPTY:42; CHECK-NEXT:   pred.store.if:43; CHECK-NEXT:     REPLICATE store ir<0>, vp<[[PTR_VEC]]>44; CHECK-NEXT:   Successor(s): pred.store.continue45; CHECK-EMPTY:46; CHECK-NEXT:   pred.store.continue:47; CHECK-NEXT:   No successors48; CHECK-NEXT: }49; CHECK-NEXT: Successor(s): if.then.2.050; CHECK-EMPTY:51; CHECK-NEXT: if.then.2.0:52; CHECK-NEXT: Successor(s): pred.store53; CHECK-EMPTY:54; CHECK-NEXT: <xVFxUF> pred.store: {55; CHECK-NEXT:   pred.store.entry:56; CHECK-NEXT:     BRANCH-ON-MASK vp<[[C1]]>57; CHECK-NEXT:   Successor(s): pred.store.if, pred.store.continue58; CHECK-EMPTY:59; CHECK-NEXT:     pred.store.if:60; CHECK-NEXT:     REPLICATE store ir<42>, vp<[[PTR_VEC]]>61; CHECK-NEXT:   Successor(s): pred.store.continue62; CHECK-EMPTY:63; CHECK-NEXT:   pred.store.continue:64; CHECK-NEXT:   No successors65; CHECK-NEXT: }66; CHECK-NEXT: Successor(s): if.then.1.167; CHECK-EMPTY:68; CHECK-NEXT: if.then.1.1:69; CHECK-NEXT: Successor(s): pred.store70; CHECK-EMPTY:71; CHECK-NEXT: <xVFxUF> pred.store: {72; CHECK-NEXT:   pred.store.entry:73; CHECK-NEXT:     BRANCH-ON-MASK vp<[[DEFAULT_MASK]]>74; CHECK-NEXT:   Successor(s): pred.store.if, pred.store.continue75; CHECK-EMPTY:76; CHECK-NEXT:   pred.store.if:77; CHECK-NEXT:     REPLICATE store ir<2>, vp<[[PTR_VEC]]>78; CHECK-NEXT:   Successor(s): pred.store.continue79; CHECK-EMPTY:80; CHECK-NEXT:   pred.store.continue:81; CHECK-NEXT:   No successors82; CHECK-NEXT: }83; CHECK-NEXT: Successor(s): default.284; CHECK-EMPTY:85; CHECK-NEXT: default.2:86; CHECK-NEXT:   EMIT vp<[[CAN_IV_NEXT]]> = add nuw vp<[[CAN_IV]]>, ir<2>87; CHECK-NEXT:   EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, vp<[[VTC]]>88; CHECK-NEXT: Successor(s): middle.block, vector.body89; CHECK-EMPTY:90; CHECK-NEXT: middle.block:91; CHECK-NEXT:   EMIT vp<[[MIDDLE_CMP:%.+]]> = icmp eq ir<%0>, vp<[[VTC]]>92; CHECK-NEXT:   EMIT branch-on-cond vp<[[MIDDLE_CMP]]>93; CHECK-NEXT: Successor(s): ir-bb<exit>, ir-bb<scalar.ph>94; CHECK-EMPTY:95; CHECK-NEXT: ir-bb<exit>:96; CHECK-NEXT: No successors97; CHECK-EMPTY:98; CHECK-NEXT: ir-bb<scalar.ph>:99; CHECK-NEXT:   EMIT-SCALAR vp<[[RESUME:%.+]]> = phi [ vp<[[END]]>, middle.block ], [ ir<%start>, ir-bb<entry> ]100; CHECK-NEXT: Successor(s): ir-bb<loop.header>101; CHECK-EMPTY:102; CHECK-NEXT: ir-bb<loop.header>:103; CHECK-NEXT:   IR   %ptr.iv = phi ptr [ %start, %scalar.ph ], [ %ptr.iv.next, %loop.latch ] (extra operand: vp<[[RESUME]]> from ir-bb<scalar.ph>)104; CHECK-NEXT:   IR   %l = load i8, ptr %ptr.iv, align 1105; CHECK-NEXT: No successors106; CHECK-NEXT: }107;108entry:109  br label %loop.header110 111loop.header:112  %ptr.iv = phi ptr [ %start, %entry ], [ %ptr.iv.next, %loop.latch ]113  %l = load i8, ptr %ptr.iv, align 1114  switch i8 %l, label %default [115  i8 -12, label %if.then.1116  i8 13, label %if.then.2117  i8 0, label %default118  ]119 120if.then.1:121  store i8 42, ptr %ptr.iv, align 1122  br label %loop.latch123 124if.then.2:125  store i8 0, ptr %ptr.iv, align 1126  br label %loop.latch127 128default:129  store i8 2, ptr %ptr.iv, align 1130  br label %loop.latch131 132loop.latch:133  %ptr.iv.next = getelementptr inbounds i8, ptr %ptr.iv, i64 1134  %ec = icmp eq ptr %ptr.iv.next, %end135  br i1 %ec, label %exit, label %loop.header136 137exit:138  ret void139}140