@@ -12,7 +12,8 @@ define <16 x i8> @knownbits_bitcast_masked_shift(<16 x i8> %arg1, <16 x i8> %arg
12
12
; CHECK-NEXT: [[BITCAST4:%.*]] = bitcast <16 x i8> [[OR]] to <8 x i16>
13
13
; CHECK-NEXT: [[SHL5:%.*]] = shl nuw <8 x i16> [[BITCAST4]], splat (i16 2)
14
14
; CHECK-NEXT: [[BITCAST6:%.*]] = bitcast <8 x i16> [[SHL5]] to <16 x i8>
15
- ; CHECK-NEXT: ret <16 x i8> [[BITCAST6]]
15
+ ; CHECK-NEXT: [[AND7:%.*]] = and <16 x i8> [[BITCAST6]], splat (i8 -52)
16
+ ; CHECK-NEXT: ret <16 x i8> [[AND7]]
16
17
;
17
18
%and = and <16 x i8 > %arg1 , splat (i8 3 )
18
19
%and3 = and <16 x i8 > %arg2 , splat (i8 48 )
@@ -32,7 +33,8 @@ define <16 x i8> @knownbits_shuffle_masked_nibble_shift(<16 x i8> %arg) {
32
33
; CHECK-NEXT: [[BITCAST1:%.*]] = bitcast <16 x i8> [[SHUFFLEVECTOR]] to <8 x i16>
33
34
; CHECK-NEXT: [[SHL:%.*]] = shl nuw <8 x i16> [[BITCAST1]], splat (i16 4)
34
35
; CHECK-NEXT: [[BITCAST2:%.*]] = bitcast <8 x i16> [[SHL]] to <16 x i8>
35
- ; CHECK-NEXT: ret <16 x i8> [[BITCAST2]]
36
+ ; CHECK-NEXT: [[AND3:%.*]] = and <16 x i8> [[BITCAST2]], splat (i8 -16)
37
+ ; CHECK-NEXT: ret <16 x i8> [[AND3]]
36
38
;
37
39
%and = and <16 x i8 > %arg , splat (i8 15 )
38
40
%shufflevector = shufflevector <16 x i8 > %and , <16 x i8 > poison, <16 x i32 > <i32 1 , i32 0 , i32 3 , i32 2 , i32 5 , i32 4 , i32 7 , i32 6 , i32 9 , i32 8 , i32 11 , i32 10 , i32 13 , i32 12 , i32 15 , i32 14 >
@@ -51,7 +53,8 @@ define <16 x i8> @knownbits_reverse_shuffle_masked_shift(<16 x i8> %arg) {
51
53
; CHECK-NEXT: [[BITCAST1:%.*]] = bitcast <16 x i8> [[SHUFFLEVECTOR]] to <8 x i16>
52
54
; CHECK-NEXT: [[SHL:%.*]] = shl nuw <8 x i16> [[BITCAST1]], splat (i16 4)
53
55
; CHECK-NEXT: [[BITCAST2:%.*]] = bitcast <8 x i16> [[SHL]] to <16 x i8>
54
- ; CHECK-NEXT: ret <16 x i8> [[BITCAST2]]
56
+ ; CHECK-NEXT: [[AND3:%.*]] = and <16 x i8> [[BITCAST2]], splat (i8 -16)
57
+ ; CHECK-NEXT: ret <16 x i8> [[AND3]]
55
58
;
56
59
%and = and <16 x i8 > %arg , splat (i8 15 )
57
60
%shufflevector = shufflevector <16 x i8 > %and , <16 x i8 > poison, <16 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 , i32 7 , i32 6 , i32 5 , i32 4 , i32 11 , i32 10 , i32 9 , i32 8 , i32 15 , i32 14 , i32 13 , i32 12 >
@@ -67,7 +70,8 @@ define <16 x i8> @knownbits_extract_bit(<8 x i16> %arg) {
67
70
; CHECK-SAME: <8 x i16> [[ARG:%.*]]) {
68
71
; CHECK-NEXT: [[LSHR:%.*]] = lshr <8 x i16> [[ARG]], splat (i16 15)
69
72
; CHECK-NEXT: [[BITCAST1:%.*]] = bitcast <8 x i16> [[LSHR]] to <16 x i8>
70
- ; CHECK-NEXT: ret <16 x i8> [[BITCAST1]]
73
+ ; CHECK-NEXT: [[AND:%.*]] = and <16 x i8> [[BITCAST1]], splat (i8 1)
74
+ ; CHECK-NEXT: ret <16 x i8> [[AND]]
71
75
;
72
76
%lshr = lshr <8 x i16 > %arg , splat (i16 15 )
73
77
%bitcast1 = bitcast <8 x i16 > %lshr to <16 x i8 >
@@ -84,8 +88,7 @@ define { i32, i1 } @knownbits_popcount_add_with_overflow(<2 x i64> %arg1, <2 x i
84
88
; CHECK-NEXT: [[CALL9:%.*]] = tail call range(i64 0, 65) <2 x i64> @llvm.ctpop.v2i64(<2 x i64> [[ARG2]])
85
89
; CHECK-NEXT: [[BITCAST10:%.*]] = bitcast <2 x i64> [[CALL9]] to <4 x i32>
86
90
; CHECK-NEXT: [[EXTRACTELEMENT11:%.*]] = extractelement <4 x i32> [[BITCAST10]], i64 0
87
- ; CHECK-NEXT: [[CALL12:%.*]] = add nuw nsw i32 [[EXTRACTELEMENT]], [[EXTRACTELEMENT11]]
88
- ; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { i32, i1 } { i32 poison, i1 false }, i32 [[CALL12]], 0
91
+ ; CHECK-NEXT: [[TMP1:%.*]] = tail call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[EXTRACTELEMENT]], i32 [[EXTRACTELEMENT11]])
89
92
; CHECK-NEXT: ret { i32, i1 } [[TMP1]]
90
93
;
91
94
%call = tail call <2 x i64 > @llvm.ctpop.v2i64 (<2 x i64 > %arg1 )
@@ -107,7 +110,11 @@ define <16 x i8> @knownbits_shuffle_add_shift_v32i8(<16 x i8> %arg1, <8 x i16> %
107
110
; CHECK-NEXT: [[BITCAST11:%.*]] = bitcast <8 x i16> [[SHL10]] to <16 x i8>
108
111
; CHECK-NEXT: [[ADD12:%.*]] = add <16 x i8> [[BITCAST11]], [[BITCAST7]]
109
112
; CHECK-NEXT: [[ADD14:%.*]] = add <16 x i8> [[ADD12]], [[ARG1]]
110
- ; CHECK-NEXT: ret <16 x i8> [[ADD14]]
113
+ ; CHECK-NEXT: [[BITCAST14:%.*]] = bitcast <16 x i8> [[ADD12]] to <8 x i16>
114
+ ; CHECK-NEXT: [[SHL15:%.*]] = shl <8 x i16> [[BITCAST14]], splat (i16 8)
115
+ ; CHECK-NEXT: [[BITCAST16:%.*]] = bitcast <8 x i16> [[SHL15]] to <16 x i8>
116
+ ; CHECK-NEXT: [[ADD13:%.*]] = add <16 x i8> [[ADD14]], [[BITCAST16]]
117
+ ; CHECK-NEXT: ret <16 x i8> [[ADD13]]
111
118
;
112
119
%shl6 = shl <8 x i16 > %arg2 , splat (i16 8 )
113
120
%bitcast7 = bitcast <8 x i16 > %shl6 to <16 x i8 >
0 commit comments