Skip to content

Commit 63b5b25

Browse files
fhahnmemfrob
authored andcommitted
[LoopUnswitch] Add some additional tests.
Add a few additional tests where partial unswitching is not really profitable and should be avoided.
1 parent 7e7404f commit 63b5b25

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

llvm/test/Transforms/LoopUnswitch/partial-unswitch.ll

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,3 +827,89 @@ loop.latch:
827827
exit:
828828
ret i32 10
829829
}
830+
831+
define i32 @no_partial_unswitch_true_successor_exit(i32* %ptr, i32 %N) {
832+
; CHECK-LABEL: @no_partial_unswitch_true_successor_exit
833+
; CHECK-LABEL: entry:
834+
; CHECK-NEXT: [[LV:%[0-9]+]] = load i32, i32* %ptr, align 4
835+
; CHECK-NEXT: [[C:%[0-9]+]] = icmp eq i32 [[LV]], 100
836+
; CHECK-NEXT: br i1 [[C]],
837+
;
838+
entry:
839+
br label %loop.header
840+
841+
loop.header:
842+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]
843+
%lv = load i32, i32* %ptr
844+
%sc = icmp eq i32 %lv, 100
845+
br i1 %sc, label %exit, label %clobber
846+
847+
clobber:
848+
call void @clobber()
849+
br label %loop.latch
850+
851+
loop.latch:
852+
%c = icmp ult i32 %iv, %N
853+
%iv.next = add i32 %iv, 1
854+
br i1 %c, label %loop.header, label %exit
855+
856+
exit:
857+
ret i32 10
858+
}
859+
860+
define i32 @no_partial_unswitch_true_same_successor(i32* %ptr, i32 %N) {
861+
; CHECK-LABEL: @no_partial_unswitch_true_same_successor
862+
; CHECK-LABEL: entry:
863+
; CHECK-NEXT: [[LV:%[0-9]+]] = load i32, i32* %ptr, align 4
864+
; CHECK-NEXT: [[C:%[0-9]+]] = icmp eq i32 [[LV]], 100
865+
; CHECK-NEXT: br i1 [[C]],
866+
;
867+
entry:
868+
br label %loop.header
869+
870+
loop.header:
871+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]
872+
%lv = load i32, i32* %ptr
873+
%sc = icmp eq i32 %lv, 100
874+
br i1 %sc, label %noclobber, label %noclobber
875+
876+
noclobber:
877+
br label %loop.latch
878+
879+
loop.latch:
880+
%c = icmp ult i32 %iv, %N
881+
%iv.next = add i32 %iv, 1
882+
br i1 %c, label %loop.header, label %exit
883+
884+
exit:
885+
ret i32 10
886+
}
887+
888+
define i32 @partial_unswitch_true_to_latch(i32* %ptr, i32 %N) {
889+
; CHECK-LABEL: @partial_unswitch_true_to_latch
890+
; CHECK-LABEL: entry:
891+
; CHECK-NEXT: [[LV:%[0-9]+]] = load i32, i32* %ptr, align 4
892+
; CHECK-NEXT: [[C:%[0-9]+]] = icmp eq i32 [[LV]], 100
893+
; CHECK-NEXT: br i1 [[C]],
894+
;
895+
entry:
896+
br label %loop.header
897+
898+
loop.header:
899+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]
900+
%lv = load i32, i32* %ptr
901+
%sc = icmp eq i32 %lv, 100
902+
br i1 %sc, label %loop.latch, label %clobber
903+
904+
clobber:
905+
call void @clobber()
906+
br label %loop.latch
907+
908+
loop.latch:
909+
%c = icmp ult i32 %iv, %N
910+
%iv.next = add i32 %iv, 1
911+
br i1 %c, label %loop.header, label %exit
912+
913+
exit:
914+
ret i32 10
915+
}

0 commit comments

Comments
 (0)