Skip to content

Commit 3efcc8e

Browse files
committed
[LV] Add test where diff checks not used when re-trying with RT checks.
1 parent 0edd077 commit 3efcc8e

File tree

1 file changed

+58
-1
lines changed

1 file changed

+58
-1
lines changed

llvm/test/Transforms/LoopVectorize/runtime-checks-difference.ll

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
21
; RUN: opt %s -passes=loop-vectorize -hoist-runtime-checks=false -force-vector-width=4 -force-vector-interleave=1 -S | FileCheck %s
32

43
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
@@ -320,3 +319,61 @@ inner.exit:
320319
outer.exit:
321320
ret void
322321
}
322+
323+
define void @use_diff_checks_when_retrying_with_rt_checks(i64 %off, ptr %dst, ptr %src) {
324+
; CHECK-LABEL: @use_diff_checks_when_retrying_with_rt_checks(
325+
; CHECK-NEXT: entry:
326+
; CHECK-NEXT: br i1 false, label %scalar.ph, label %vector.memcheck
327+
; CHECK: vector.memcheck:
328+
; CHECK-NEXT: [[TMP0:%.*]] = shl i64 %off, 3
329+
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr %dst, i64 [[TMP0]]
330+
; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[TMP0]], 8000
331+
; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr %dst, i64 [[TMP1]]
332+
; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr %dst, i64 8000
333+
; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr %src, i64 8000
334+
; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr i8, ptr %src, i64 8
335+
; CHECK-NEXT: [[SCEVGEP5:%.*]] = getelementptr i8, ptr %src, i64 8008
336+
; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[SCEVGEP]], [[SCEVGEP2]]
337+
; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr %dst, [[SCEVGEP1]]
338+
; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]]
339+
; CHECK-NEXT: [[BOUND06:%.*]] = icmp ult ptr [[SCEVGEP]], [[SCEVGEP3]]
340+
; CHECK-NEXT: [[BOUND17:%.*]] = icmp ult ptr %src, [[SCEVGEP1]]
341+
; CHECK-NEXT: [[FOUND_CONFLICT8:%.*]] = and i1 [[BOUND06]], [[BOUND17]]
342+
; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT8]]
343+
; CHECK-NEXT: [[BOUND09:%.*]] = icmp ult ptr [[SCEVGEP]], [[SCEVGEP5]]
344+
; CHECK-NEXT: [[BOUND110:%.*]] = icmp ult ptr [[SCEVGEP4]], [[SCEVGEP1]]
345+
; CHECK-NEXT: [[FOUND_CONFLICT11:%.*]] = and i1 [[BOUND09]], [[BOUND110]]
346+
; CHECK-NEXT: [[CONFLICT_RDX12:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT11]]
347+
; CHECK-NEXT: [[BOUND013:%.*]] = icmp ult ptr %dst, [[SCEVGEP3]]
348+
; CHECK-NEXT: [[BOUND114:%.*]] = icmp ult ptr %src, [[SCEVGEP2]]
349+
; CHECK-NEXT: [[FOUND_CONFLICT15:%.*]] = and i1 [[BOUND013]], [[BOUND114]]
350+
; CHECK-NEXT: [[CONFLICT_RDX16:%.*]] = or i1 [[CONFLICT_RDX12]], [[FOUND_CONFLICT15]]
351+
; CHECK-NEXT: [[BOUND017:%.*]] = icmp ult ptr %dst, [[SCEVGEP5]]
352+
; CHECK-NEXT: [[BOUND118:%.*]] = icmp ult ptr [[SCEVGEP4]], [[SCEVGEP2]]
353+
; CHECK-NEXT: [[FOUND_CONFLICT19:%.*]] = and i1 [[BOUND017]], [[BOUND118]]
354+
; CHECK-NEXT: [[CONFLICT_RDX20:%.*]] = or i1 [[CONFLICT_RDX16]], [[FOUND_CONFLICT19]]
355+
; CHECK-NEXT: br i1 [[CONFLICT_RDX20]], label %scalar.ph, label %vector.ph
356+
; CHECK: vector.ph:
357+
; CHECK-NEXT: br label %vector.body
358+
;
359+
entry:
360+
br label %loop
361+
362+
loop:
363+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
364+
%iv.off = add i64 %off, %iv
365+
%gep.src = getelementptr i64, ptr %src, i64 %iv
366+
%l.0 = load i64, ptr %gep.src, align 8
367+
%gep.dst.off = getelementptr i64, ptr %dst, i64 %iv.off
368+
store i64 %l.0, ptr %gep.dst.off, align 8
369+
%gep.src.8 = getelementptr i8, ptr %gep.src, i64 8
370+
%l.1 = load i64, ptr %gep.src.8, align 8
371+
%gep.dst.iv = getelementptr i64, ptr %dst, i64 %iv
372+
store i64 %l.1, ptr %gep.dst.iv, align 8
373+
%iv.next = add i64 %iv, 1
374+
%ec = icmp eq i64 %iv.next, 1000
375+
br i1 %ec, label %exit, label %loop
376+
377+
exit:
378+
ret void
379+
}

0 commit comments

Comments
 (0)