@@ -3800,3 +3800,64 @@ define i1 @ashrslt_03_15_exact(i4 %x) {
3800
3800
ret i1 %c
3801
3801
}
3802
3802
3803
+ ; TODO: The resulting compared constant can be safely replaced with one that
3804
+ ; is closer to a power of two.
3805
+ define i1 @ashr_slt_exact_near_pow2_cmpval (i8 %x ) {
3806
+ ; CHECK-LABEL: @ashr_slt_exact_near_pow2_cmpval(
3807
+ ; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], 10
3808
+ ; CHECK-NEXT: ret i1 [[C]]
3809
+ ;
3810
+ %s = ashr exact i8 %x , 1
3811
+ %c = icmp slt i8 %s , 5
3812
+ ret i1 %c
3813
+ }
3814
+
3815
+ define i1 @ashr_ult_exact_near_pow2_cmpval (i8 %x ) {
3816
+ ; CHECK-LABEL: @ashr_ult_exact_near_pow2_cmpval(
3817
+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], 10
3818
+ ; CHECK-NEXT: ret i1 [[C]]
3819
+ ;
3820
+ %s = ashr exact i8 %x , 1
3821
+ %c = icmp ult i8 %s , 5
3822
+ ret i1 %c
3823
+ }
3824
+
3825
+ define i1 @negtest_near_pow2_cmpval_ashr_slt_noexact (i8 %x ) {
3826
+ ; CHECK-LABEL: @negtest_near_pow2_cmpval_ashr_slt_noexact(
3827
+ ; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], 10
3828
+ ; CHECK-NEXT: ret i1 [[C]]
3829
+ ;
3830
+ %s = ashr i8 %x , 1
3831
+ %c = icmp slt i8 %s , 5
3832
+ ret i1 %c
3833
+ }
3834
+
3835
+ define i1 @negtest_near_pow2_cmpval_ashr_wrong_cmp_pred (i8 %x ) {
3836
+ ; CHECK-LABEL: @negtest_near_pow2_cmpval_ashr_wrong_cmp_pred(
3837
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[X:%.*]], 10
3838
+ ; CHECK-NEXT: ret i1 [[C]]
3839
+ ;
3840
+ %s = ashr exact i8 %x , 1
3841
+ %c = icmp eq i8 %s , 5
3842
+ ret i1 %c
3843
+ }
3844
+
3845
+ define i1 @negtest_near_pow2_cmpval_isnt_close_to_pow2 (i8 %x ) {
3846
+ ; CHECK-LABEL: @negtest_near_pow2_cmpval_isnt_close_to_pow2(
3847
+ ; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], 12
3848
+ ; CHECK-NEXT: ret i1 [[C]]
3849
+ ;
3850
+ %s = ashr exact i8 %x , 1
3851
+ %c = icmp slt i8 %s , 6
3852
+ ret i1 %c
3853
+ }
3854
+
3855
+ define i1 @negtest_near_pow2_cmpval_would_overflow_into_signbit (i8 %x ) {
3856
+ ; CHECK-LABEL: @negtest_near_pow2_cmpval_would_overflow_into_signbit(
3857
+ ; CHECK-NEXT: [[C:%.*]] = icmp sgt i8 [[X:%.*]], -1
3858
+ ; CHECK-NEXT: ret i1 [[C]]
3859
+ ;
3860
+ %s = ashr exact i8 %x , 2
3861
+ %c = icmp ult i8 %s , 33
3862
+ ret i1 %c
3863
+ }
0 commit comments