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