@@ -580,6 +580,127 @@ exit:
580580 ret  i32  %add 
581581}
582582
583+ define  i32  @print_mulacc_negated (ptr  %a , ptr  %b ) {
584+ ; CHECK-LABEL: 'print_mulacc_negated' 
585+ ; CHECK: VPlan 'Initial VPlan for VF={4},UF>=1' { 
586+ ; CHECK-NEXT: Live-in vp<%0> = VF 
587+ ; CHECK-NEXT: Live-in vp<%1> = VF * UF 
588+ ; CHECK-NEXT: Live-in vp<%2> = vector-trip-count 
589+ ; CHECK-NEXT: Live-in ir<1024> = original trip-count 
590+ ; CHECK-EMPTY: 
591+ ; CHECK-NEXT: ir-bb<entry>: 
592+ ; CHECK-NEXT: Successor(s): scalar.ph, vector.ph 
593+ ; CHECK-EMPTY: 
594+ ; CHECK-NEXT: vector.ph: 
595+ ; CHECK-NEXT: EMIT vp<%3> = reduction-start-vector ir<0>, ir<0>, ir<1> 
596+ ; CHECK-NEXT: Successor(s): vector loop 
597+ ; CHECK-EMPTY: 
598+ ; CHECK-NEXT: <x1> vector loop: { 
599+ ; CHECK-NEXT: vector.body: 
600+ ; CHECK-NEXT: EMIT vp<%4> = CANONICAL-INDUCTION ir<0>, vp<%index.next> 
601+ ; CHECK-NEXT: WIDEN-REDUCTION-PHI ir<%accum> = phi vp<%3>, vp<%8> 
602+ ; CHECK-NEXT: vp<%5> = SCALAR-STEPS vp<%4>, ir<1>, vp<%0> 
603+ ; CHECK-NEXT: CLONE ir<%gep.a> = getelementptr ir<%a>, vp<%5> 
604+ ; CHECK-NEXT: vp<%6> = vector-pointer ir<%gep.a> 
605+ ; CHECK-NEXT: WIDEN ir<%load.a> = load vp<%6> 
606+ ; CHECK-NEXT: CLONE ir<%gep.b> = getelementptr ir<%b>, vp<%5> 
607+ ; CHECK-NEXT: vp<%7> = vector-pointer ir<%gep.b> 
608+ ; CHECK-NEXT: WIDEN ir<%load.b> = load vp<%7> 
609+ ; CHECK-NEXT: EXPRESSION vp<%8> = ir<%accum> + reduce.add (sub (0, mul (ir<%load.b> zext to i32), (ir<%load.a> zext to i32))) 
610+ ; CHECK-NEXT: EMIT vp<%index.next> = add nuw vp<%4>, vp<%1> 
611+ ; CHECK-NEXT: EMIT branch-on-count vp<%index.next>, vp<%2> 
612+ ; CHECK-NEXT: No successors 
613+ ; CHECK-NEXT: } 
614+ ; CHECK-NEXT: Successor(s): middle.block 
615+ ; CHECK-EMPTY: 
616+ ; CHECK-NEXT: middle.block: 
617+ ; CHECK-NEXT: EMIT vp<%10> = compute-reduction-result ir<%accum>, vp<%8> 
618+ ; CHECK-NEXT: EMIT vp<%cmp.n> = icmp eq ir<1024>, vp<%2> 
619+ ; CHECK-NEXT: EMIT branch-on-cond vp<%cmp.n> 
620+ ; CHECK-NEXT: Successor(s): ir-bb<exit>, scalar.ph 
621+ ; CHECK-EMPTY: 
622+ ; CHECK-NEXT: ir-bb<exit>: 
623+ ; CHECK-NEXT: IR %add.lcssa = phi i32 [ %add, %loop ] (extra operand: vp<%10> from middle.block) 
624+ ; CHECK-NEXT: No successors 
625+ ; CHECK-EMPTY: 
626+ ; CHECK-NEXT: scalar.ph: 
627+ ; CHECK-NEXT: EMIT-SCALAR vp<%bc.resume.val> = phi [ vp<%2>, middle.block ], [ ir<0>, ir-bb<entry> ] 
628+ ; CHECK-NEXT: EMIT-SCALAR vp<%bc.merge.rdx> = phi [ vp<%10>, middle.block ], [ ir<0>, ir-bb<entry> ] 
629+ ; CHECK-NEXT: Successor(s): ir-bb<loop> 
630+ ; CHECK-EMPTY: 
631+ ; CHECK-NEXT: ir-bb<loop>: 
632+ ; CHECK-NEXT: IR %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] (extra operand: vp<%bc.resume.val> from scalar.ph) 
633+ ; CHECK-NEXT: IR %accum = phi i32 [ 0, %entry ], [ %add, %loop ] (extra operand: vp<%bc.merge.rdx> from scalar.ph) 
634+ ; CHECK-NEXT: IR %gep.a = getelementptr i8, ptr %a, i64 %iv 
635+ ; CHECK-NEXT: IR %load.a = load i8, ptr %gep.a, align 1 
636+ ; CHECK-NEXT: IR %ext.a = zext i8 %load.a to i32 
637+ ; CHECK-NEXT: IR %gep.b = getelementptr i8, ptr %b, i64 %iv 
638+ ; CHECK-NEXT: IR %load.b = load i8, ptr %gep.b, align 1 
639+ ; CHECK-NEXT: IR %ext.b = zext i8 %load.b to i32 
640+ ; CHECK-NEXT: IR %mul = mul i32 %ext.b, %ext.a 
641+ ; CHECK-NEXT: IR %sub = sub i32 0, %mul 
642+ ; CHECK-NEXT: IR %add = add i32 %accum, %sub 
643+ ; CHECK-NEXT: IR %iv.next = add i64 %iv, 1 
644+ ; CHECK-NEXT: IR %exitcond.not = icmp eq i64 %iv.next, 1024 
645+ ; CHECK-NEXT: No successors 
646+ ; CHECK-NEXT: } 
647+ ; CHECK: VPlan 'Final VPlan for VF={4},UF={1}' { 
648+ ; CHECK-NEXT: Live-in ir<1024> = vector-trip-count 
649+ ; CHECK-NEXT: Live-in ir<1024> = original trip-count 
650+ ; CHECK-EMPTY: 
651+ ; CHECK-NEXT: ir-bb<entry>: 
652+ ; CHECK-NEXT: Successor(s): vector.ph 
653+ ; CHECK-EMPTY: 
654+ ; CHECK-NEXT: vector.ph: 
655+ ; CHECK-NEXT: Successor(s): vector.body 
656+ ; CHECK-EMPTY: 
657+ ; CHECK-NEXT: vector.body: 
658+ ; CHECK-NEXT: EMIT-SCALAR vp<%index> = phi [ ir<0>, vector.ph ], [ vp<%index.next>, vector.body ] 
659+ ; CHECK-NEXT: WIDEN-REDUCTION-PHI ir<%accum> = phi ir<0>, ir<%add> 
660+ ; CHECK-NEXT: CLONE ir<%gep.a> = getelementptr ir<%a>, vp<%index> 
661+ ; CHECK-NEXT: WIDEN ir<%load.a> = load ir<%gep.a> 
662+ ; CHECK-NEXT: CLONE ir<%gep.b> = getelementptr ir<%b>, vp<%index> 
663+ ; CHECK-NEXT: WIDEN ir<%load.b> = load ir<%gep.b> 
664+ ; CHECK-NEXT: WIDEN-CAST ir<%ext.b> = zext ir<%load.b> to i32 
665+ ; CHECK-NEXT: WIDEN-CAST ir<%ext.a> = zext ir<%load.a> to i32 
666+ ; CHECK-NEXT: WIDEN ir<%mul> = mul ir<%ext.b>, ir<%ext.a> 
667+ ; CHECK-NEXT: WIDEN ir<%sub> = sub ir<0>, ir<%mul> 
668+ ; CHECK-NEXT: REDUCE ir<%add> = ir<%accum> + reduce.add (ir<%sub>) 
669+ ; CHECK-NEXT: EMIT vp<%index.next> = add nuw vp<%index>, ir<4> 
670+ ; CHECK-NEXT: EMIT branch-on-count vp<%index.next>, ir<1024> 
671+ ; CHECK-NEXT: Successor(s): middle.block, vector.body 
672+ ; CHECK-EMPTY: 
673+ ; CHECK-NEXT: middle.block: 
674+ ; CHECK-NEXT: EMIT vp<[[RED_RESULT:%.+]]> = compute-reduction-result ir<%accum>, ir<%add> 
675+ ; CHECK-NEXT: Successor(s): ir-bb<exit> 
676+ ; CHECK-EMPTY: 
677+ ; CHECK-NEXT: ir-bb<exit>: 
678+ ; CHECK-NEXT: IR %add.lcssa = phi i32 [ %add, %loop ] (extra operand: vp<[[RED_RESULT]]> from middle.block) 
679+ ; CHECK-NEXT: No successors 
680+ ; CHECK-NEXT: } 
681+ entry:
682+  br  label  %loop 
683+ 
684+ loop:
685+  %iv  = phi  i64  [ 0 , %entry  ], [ %iv.next , %loop  ]
686+  %accum  = phi  i32  [ 0 , %entry  ], [ %add , %loop  ]
687+  %gep.a  = getelementptr  i8 , ptr  %a , i64  %iv 
688+  %load.a  = load  i8 , ptr  %gep.a , align  1 
689+  %ext.a  = zext  i8  %load.a  to  i32 
690+  %gep.b  = getelementptr  i8 , ptr  %b , i64  %iv 
691+  %load.b  = load  i8 , ptr  %gep.b , align  1 
692+  %ext.b  = zext  i8  %load.b  to  i32 
693+  %mul  = mul  i32  %ext.b , %ext.a 
694+  %sub  = sub  i32  0 , %mul 
695+  %add  = add  i32  %accum , %sub 
696+  %iv.next  = add  i64  %iv , 1 
697+  %exitcond.not  = icmp  eq  i64  %iv.next , 1024 
698+  br  i1  %exitcond.not , label  %exit , label  %loop 
699+ 
700+ exit:
701+  ret  i32  %add 
702+ }
703+ 
583704define  i64  @print_mulacc_sub_extended (ptr  nocapture  readonly  %x , ptr  nocapture  readonly  %y , i32  %n ) {
584705; CHECK-LABEL: 'print_mulacc_sub_extended' 
585706; CHECK: VPlan 'Initial VPlan for VF={4},UF>=1' { 
0 commit comments