@@ -3070,14 +3070,13 @@ define <8 x i1> @bitreverse_vec_ne(<8 x i16> %x, <8 x i16> %y) {
3070
3070
3071
3071
; These perform a comparison of a value known to be between 4 and 5 with a value between 5 and 7.
3072
3072
; They should all simplify to equality compares.
3073
- ; FIXME this should simplify to an equality comparison
3074
3073
define i1 @knownbits1 (i8 %a , i8 %b ) {
3075
3074
; CHECK-LABEL: @knownbits1(
3076
3075
; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3077
3076
; CHECK-NEXT: [[A2:%.*]] = or i8 [[A1]], 4
3078
3077
; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3079
3078
; CHECK-NEXT: [[B2:%.*]] = or i8 [[B1]], 5
3080
- ; CHECK-NEXT: [[C:%.*]] = icmp uge i8 [[A2]], [[B2]]
3079
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A2]], [[B2]]
3081
3080
; CHECK-NEXT: ret i1 [[C]]
3082
3081
;
3083
3082
%a1 = and i8 %a , 5
@@ -3105,14 +3104,13 @@ define i1 @knownbits2(i8 %a, i8 %b) {
3105
3104
ret i1 %c
3106
3105
}
3107
3106
3108
- ; FIXME this should simplify to an equality comparison
3109
3107
define i1 @knownbits3 (i8 %a , i8 %b ) {
3110
3108
; CHECK-LABEL: @knownbits3(
3111
3109
; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3112
3110
; CHECK-NEXT: [[A2:%.*]] = or i8 [[A1]], 4
3113
3111
; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3114
3112
; CHECK-NEXT: [[B2:%.*]] = or i8 [[B1]], 5
3115
- ; CHECK-NEXT: [[C:%.*]] = icmp ule i8 [[B2]], [[A2]]
3113
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[B2]], [[A2]]
3116
3114
; CHECK-NEXT: ret i1 [[C]]
3117
3115
;
3118
3116
%a1 = and i8 %a , 5
@@ -3142,14 +3140,13 @@ define <2 x i1> @knownbits4(<2 x i8> %a, <2 x i8> %b) {
3142
3140
3143
3141
; These are the signed versions of the above. One value is less than or equal to 5, but maybe negative.
3144
3142
; The other is known to be a value 5-7. These should simplify to equality comparisons.
3145
- ; FIXME this should simplify to an equality comparison
3146
3143
define i1 @knownbits5 (i8 %a , i8 %b ) {
3147
3144
; CHECK-LABEL: @knownbits5(
3148
3145
; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3149
3146
; CHECK-NEXT: [[A2:%.*]] = or i8 [[A1]], 4
3150
3147
; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3151
3148
; CHECK-NEXT: [[B2:%.*]] = or i8 [[B1]], 5
3152
- ; CHECK-NEXT: [[C:%.*]] = icmp sge i8 [[A2]], [[B2]]
3149
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A2]], [[B2]]
3153
3150
; CHECK-NEXT: ret i1 [[C]]
3154
3151
;
3155
3152
%a1 = and i8 %a , 133
@@ -3177,14 +3174,13 @@ define i1 @knownbits6(i8 %a, i8 %b) {
3177
3174
ret i1 %c
3178
3175
}
3179
3176
3180
- ; FIXME this should simplify to an equality comparison
3181
3177
define <2 x i1 > @knownbits7 (<2 x i8 > %a , <2 x i8 > %b ) {
3182
3178
; CHECK-LABEL: @knownbits7(
3183
3179
; CHECK-NEXT: [[A1:%.*]] = and <2 x i8> [[A:%.*]], <i8 -127, i8 -127>
3184
3180
; CHECK-NEXT: [[A2:%.*]] = or <2 x i8> [[A1]], <i8 4, i8 4>
3185
3181
; CHECK-NEXT: [[B1:%.*]] = and <2 x i8> [[B:%.*]], <i8 2, i8 2>
3186
3182
; CHECK-NEXT: [[B2:%.*]] = or <2 x i8> [[B1]], <i8 5, i8 5>
3187
- ; CHECK-NEXT: [[C:%.*]] = icmp sle <2 x i8> [[B2]], [[A2]]
3183
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq <2 x i8> [[B2]], [[A2]]
3188
3184
; CHECK-NEXT: ret <2 x i1> [[C]]
3189
3185
;
3190
3186
%a1 = and <2 x i8 > %a , <i8 133 , i8 133 >
0 commit comments