@@ -815,6 +815,51 @@ define i1 @test46(i32 %X, i32 %Y, i32 %Z) {
815
815
ret i1 %C
816
816
}
817
817
818
+ define i1 @test46_multiuse1 (i32 %X , i32 %Y , i32 %Z ) {
819
+ ; CHECK-LABEL: @test46_multiuse1(
820
+ ; CHECK-NEXT: [[A:%.*]] = ashr exact i32 [[X:%.*]], [[Z:%.*]]
821
+ ; CHECK-NEXT: call void @use_i32(i32 [[A]])
822
+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[X]], [[Y:%.*]]
823
+ ; CHECK-NEXT: ret i1 [[C]]
824
+ ;
825
+ %A = ashr exact i32 %X , %Z
826
+ call void @use_i32 (i32 %A )
827
+ %B = ashr exact i32 %Y , %Z
828
+ %C = icmp ult i32 %A , %B
829
+ ret i1 %C
830
+ }
831
+
832
+ define i1 @test46_multiuse2 (i32 %X , i32 %Y , i32 %Z ) {
833
+ ; CHECK-LABEL: @test46_multiuse2(
834
+ ; CHECK-NEXT: [[B:%.*]] = ashr exact i32 [[Y:%.*]], [[Z:%.*]]
835
+ ; CHECK-NEXT: call void @use_i32(i32 [[B]])
836
+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[X:%.*]], [[Y]]
837
+ ; CHECK-NEXT: ret i1 [[C]]
838
+ ;
839
+ %A = ashr exact i32 %X , %Z
840
+ %B = ashr exact i32 %Y , %Z
841
+ call void @use_i32 (i32 %B )
842
+ %C = icmp ult i32 %A , %B
843
+ ret i1 %C
844
+ }
845
+
846
+ define i1 @test46_multiuse3 (i32 %X , i32 %Y , i32 %Z ) {
847
+ ; CHECK-LABEL: @test46_multiuse3(
848
+ ; CHECK-NEXT: [[A:%.*]] = ashr exact i32 [[X:%.*]], [[Z:%.*]]
849
+ ; CHECK-NEXT: call void @use_i32(i32 [[A]])
850
+ ; CHECK-NEXT: [[B:%.*]] = ashr exact i32 [[Y:%.*]], [[Z]]
851
+ ; CHECK-NEXT: call void @use_i32(i32 [[B]])
852
+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[A]], [[B]]
853
+ ; CHECK-NEXT: ret i1 [[C]]
854
+ ;
855
+ %A = ashr exact i32 %X , %Z
856
+ call void @use_i32 (i32 %A )
857
+ %B = ashr exact i32 %Y , %Z
858
+ call void @use_i32 (i32 %B )
859
+ %C = icmp ult i32 %A , %B
860
+ ret i1 %C
861
+ }
862
+
818
863
; PR9343 #5
819
864
define i1 @test47 (i32 %X , i32 %Y , i32 %Z ) {
820
865
; CHECK-LABEL: @test47(
0 commit comments