Skip to content

Commit 3c5c61a

Browse files
committed
[LV] Add first order rec test where hoisting can improve over sinking.
1 parent 79d380f commit 3c5c61a

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

llvm/test/Transforms/LoopVectorize/first-order-recurrence-multiply-recurrences.ll

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,3 +381,42 @@ loop:
381381
exit:
382382
ret void
383383
}
384+
385+
define void @hoist_previous_value_and_operands(ptr %dst, i64 %mask) {
386+
; CHECK-LABEL: @hoist_previous_value_and_operands(
387+
; CHECK-NEXT: bb:
388+
; CHECK-NEXT: br label [[LOOP:%.*]]
389+
; CHECK: loop:
390+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[ADD:%.*]], [[LOOP]] ], [ 1, [[BB:%.*]] ]
391+
; CHECK-NEXT: [[FOR_1:%.*]] = phi i32 [ [[TRUNC:%.*]], [[LOOP]] ], [ 1, [[BB]] ]
392+
; CHECK-NEXT: [[FOR_2:%.*]] = phi i32 [ [[OR:%.*]], [[LOOP]] ], [ 0, [[BB]] ]
393+
; CHECK-NEXT: [[OR]] = or i32 [[FOR_1]], 0
394+
; CHECK-NEXT: [[ADD]] = add i64 [[IV]], 1
395+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i64 [[IV]]
396+
; CHECK-NEXT: store i32 [[FOR_2]], ptr [[GEP]], align 4
397+
; CHECK-NEXT: [[ICMP:%.*]] = icmp ult i64 [[IV]], 337
398+
; CHECK-NEXT: [[A:%.*]] = and i64 [[IV]], [[MASK:%.*]]
399+
; CHECK-NEXT: [[TRUNC]] = trunc i64 [[A]] to i32
400+
; CHECK-NEXT: br i1 [[ICMP]], label [[LOOP]], label [[EXIT:%.*]]
401+
; CHECK: exit:
402+
; CHECK-NEXT: ret void
403+
;
404+
bb:
405+
br label %loop
406+
407+
loop:
408+
%iv = phi i64 [ %add, %loop ], [ 1, %bb ]
409+
%for.1 = phi i32 [ %trunc, %loop ], [ 1, %bb ]
410+
%for.2 = phi i32 [ %or, %loop ], [ 0, %bb ]
411+
%or = or i32 %for.1, 0
412+
%add = add i64 %iv, 1
413+
%gep = getelementptr inbounds i32, ptr %dst, i64 %iv
414+
store i32 %for.2, ptr %gep, align 4
415+
%icmp = icmp ult i64 %iv, 337
416+
%a = and i64 %iv, %mask
417+
%trunc = trunc i64 %a to i32
418+
br i1 %icmp, label %loop, label %exit
419+
420+
exit:
421+
ret void
422+
}

0 commit comments

Comments
 (0)