Skip to content

Commit 56d6159

Browse files
committed
Test precommit
1 parent e33f456 commit 56d6159

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
; REQUIRES: asserts
2+
; RUN: opt -mattr=+neon,+dotprod -passes=loop-vectorize -debug-only=loop-vectorize -force-vector-interleave=1 -enable-epilogue-vectorization -epilogue-vectorization-force-VF=2 -disable-output %s 2>&1 | FileCheck %s
3+
4+
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
5+
target triple = "aarch64-none-unknown-elf"
6+
7+
; Tests for printing VPlans that are enabled under AArch64
8+
; CHECK: VPlan 'Final VPlan for VF={8,16},UF={1}' {
9+
; CHECK-NEXT: Live-in ir<16> = VF * UF
10+
; CHECK-NEXT: Live-in ir<1024> = vector-trip-count
11+
; CHECK-NEXT: Live-in ir<1024> = original trip-count
12+
; CHECK-EMPTY:
13+
; CHECK-NEXT: ir-bb<entry>:
14+
; CHECK-NEXT: Successor(s): ir-bb<scalar.ph>, ir-bb<vector.main.loop.iter.check>
15+
; CHECK-EMPTY:
16+
; CHECK-NEXT: ir-bb<vector.main.loop.iter.check>:
17+
; CHECK-NEXT: Successor(s): ir-bb<scalar.ph>, ir-bb<vector.ph>
18+
; CHECK-EMPTY:
19+
; CHECK-NEXT: ir-bb<vector.ph>:
20+
; CHECK-NEXT: Successor(s): vector loop
21+
; CHECK-EMPTY:
22+
; CHECK-NEXT: <x1> vector loop: {
23+
; CHECK-NEXT: vector.body:
24+
; CHECK-NEXT: SCALAR-PHI vp<%0> = phi ir<0>, vp<%index.next>
25+
; CHECK-NEXT: WIDEN-REDUCTION-PHI ir<%accum> = phi ir<0>, vp<%4> (VF scaled by 1/4)
26+
; CHECK-NEXT: vp<%1> = SCALAR-STEPS vp<%0>, ir<1>
27+
; CHECK-NEXT: CLONE ir<%gep.a> = getelementptr ir<%a>, vp<%1>
28+
; CHECK-NEXT: vp<%2> = vector-pointer ir<%gep.a>
29+
; CHECK-NEXT: WIDEN ir<%load.a> = load vp<%2>
30+
; CHECK-NEXT: WIDEN-CAST ir<%ext.a> = zext ir<%load.a> to i32
31+
; CHECK-NEXT: CLONE ir<%gep.b> = getelementptr ir<%b>, vp<%1>
32+
; CHECK-NEXT: vp<%3> = vector-pointer ir<%gep.b>
33+
; CHECK-NEXT: WIDEN ir<%load.b> = load vp<%3>
34+
; CHECK-NEXT: WIDEN-CAST ir<%ext.b> = zext ir<%load.b> to i32
35+
; CHECK-NEXT: WIDEN ir<%mul> = mul ir<%ext.b>, ir<%ext.a>
36+
; CHECK-NEXT: PARTIAL-REDUCE vp<%4> = add ir<%mul>, ir<%accum>
37+
; CHECK-NEXT: EMIT vp<%index.next> = add nuw vp<%0>, ir<16>
38+
; CHECK-NEXT: EMIT branch-on-count vp<%index.next>, ir<1024>
39+
; CHECK-NEXT: No successors
40+
; CHECK-NEXT: }
41+
; CHECK-NEXT: Successor(s): ir-bb<middle.block>
42+
; CHECK-EMPTY:
43+
; CHECK-NEXT: ir-bb<middle.block>:
44+
; CHECK-NEXT: EMIT vp<%6> = compute-reduction-result ir<%accum>, vp<%4>
45+
; CHECK-NEXT: EMIT vp<%7> = extract-from-end vp<%6>, ir<1>
46+
; CHECK-NEXT: EMIT vp<%cmp.n> = icmp eq ir<1024>, ir<1024>
47+
; CHECK-NEXT: EMIT branch-on-cond vp<%cmp.n>
48+
; CHECK-NEXT: Successor(s): ir-bb<exit>, ir-bb<scalar.ph>
49+
; CHECK-EMPTY:
50+
; CHECK-NEXT: ir-bb<exit>:
51+
; CHECK-NEXT: IR %add.lcssa = phi i32 [ %add, %for.body ] (extra operand: vp<%7> from ir-bb<middle.block>)
52+
; CHECK-NEXT: No successors
53+
; CHECK-EMPTY:
54+
; CHECK-NEXT: ir-bb<scalar.ph>:
55+
; CHECK-NEXT: EMIT vp<%vec.epilog.resume.val> = resume-phi ir<1024>, ir<0>
56+
; CHECK-NEXT: EMIT vp<%bc.merge.rdx> = resume-phi vp<%6>, ir<0>
57+
; CHECK-NEXT: Successor(s): ir-bb<for.body>
58+
; CHECK-EMPTY:
59+
; CHECK-NEXT: ir-bb<for.body>:
60+
; CHECK-NEXT: IR %accum = phi i32 [ 0, %scalar.ph ], [ %add, %for.body ] (extra operand: vp<%bc.merge.rdx> from ir-bb<scalar.ph>)
61+
; CHECK-NEXT: IR %gep.a = getelementptr i8, ptr %a, i64 %iv
62+
; CHECK-NEXT: IR %load.a = load i8, ptr %gep.a, align 1
63+
; CHECK-NEXT: IR %ext.a = zext i8 %load.a to i32
64+
; CHECK-NEXT: IR %gep.b = getelementptr i8, ptr %b, i64 %iv
65+
; CHECK-NEXT: IR %load.b = load i8, ptr %gep.b, align 1
66+
; CHECK-NEXT: IR %ext.b = zext i8 %load.b to i32
67+
; CHECK-NEXT: IR %mul = mul i32 %ext.b, %ext.a
68+
; CHECK-NEXT: IR %add = add i32 %mul, %accum
69+
; CHECK-NEXT: IR %iv.next = add i64 %iv, 1
70+
; CHECK-NEXT: IR %exitcond.not = icmp eq i64 %iv.next, 1024
71+
; CHECK-NEXT: No successors
72+
; CHECK-NEXT: }
73+
define i32 @print_partial_reduction(ptr %a, ptr %b) {
74+
entry:
75+
br label %for.body
76+
77+
for.body: ; preds = %for.body, %entry
78+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
79+
%accum = phi i32 [ 0, %entry ], [ %add, %for.body ]
80+
%gep.a = getelementptr i8, ptr %a, i64 %iv
81+
%load.a = load i8, ptr %gep.a, align 1
82+
%ext.a = zext i8 %load.a to i32
83+
%gep.b = getelementptr i8, ptr %b, i64 %iv
84+
%load.b = load i8, ptr %gep.b, align 1
85+
%ext.b = zext i8 %load.b to i32
86+
%mul = mul i32 %ext.b, %ext.a
87+
%add = add i32 %mul, %accum
88+
%iv.next = add i64 %iv, 1
89+
%exitcond.not = icmp eq i64 %iv.next, 1024
90+
br i1 %exitcond.not, label %exit, label %for.body
91+
92+
exit:
93+
ret i32 %add
94+
}

0 commit comments

Comments
 (0)