Skip to content

Commit d6722b1

Browse files
committed
address comments
1 parent f7e238b commit d6722b1

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ static bool haveNoCommonBitsSetSpecialCases(const Value *LHS, const Value *RHS,
238238
match(LHS, m_LShr(m_Value(), m_Specific(V)))) ||
239239
(match(RHS, m_LShr(m_Value(), m_Sub(m_APInt(R), m_Value(V)))) &&
240240
match(LHS, m_Shl(m_Value(), m_Specific(V))))) &&
241-
R->uge(LHS->getType()->getScalarType()->getIntegerBitWidth()))
241+
R->uge(LHS->getType()->getScalarSizeInBits()))
242242
return true;
243243
}
244244

llvm/test/Transforms/InstCombine/rotate.ll

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,3 +1011,78 @@ define i32 @rotr_i32_add(i32 %x, i32 %y) {
10111011
%r = add i32 %shr, %shl
10121012
ret i32 %r
10131013
}
1014+
1015+
define i32 @fshr_i32_add(i32 %x, i32 %y, i32 %z) {
1016+
; CHECK-LABEL: @fshr_i32_add(
1017+
; CHECK-NEXT: [[SUB:%.*]] = sub i32 32, [[Z:%.*]]
1018+
; CHECK-NEXT: [[SHL:%.*]] = lshr i32 [[X:%.*]], [[Z]]
1019+
; CHECK-NEXT: [[SHR:%.*]] = shl i32 [[Y:%.*]], [[SUB]]
1020+
; CHECK-NEXT: [[R:%.*]] = or disjoint i32 [[SHR]], [[SHL]]
1021+
; CHECK-NEXT: ret i32 [[R]]
1022+
;
1023+
%sub = sub i32 32, %z
1024+
%shl = lshr i32 %x, %z
1025+
%shr = shl i32 %y, %sub
1026+
%r = add i32 %shr, %shl
1027+
ret i32 %r
1028+
}
1029+
1030+
define i32 @fshl_i32_add(i32 %x, i32 %y, i32 %z) {
1031+
; CHECK-LABEL: @fshl_i32_add(
1032+
; CHECK-NEXT: [[SUB:%.*]] = sub i32 32, [[Z:%.*]]
1033+
; CHECK-NEXT: [[SHL:%.*]] = shl i32 [[Y:%.*]], [[Z]]
1034+
; CHECK-NEXT: [[SHR:%.*]] = lshr i32 [[X:%.*]], [[SUB]]
1035+
; CHECK-NEXT: [[R:%.*]] = or disjoint i32 [[SHR]], [[SHL]]
1036+
; CHECK-NEXT: ret i32 [[R]]
1037+
;
1038+
%sub = sub i32 32, %z
1039+
%shl = shl i32 %y, %z
1040+
%shr = lshr i32 %x, %sub
1041+
%r = add i32 %shr, %shl
1042+
ret i32 %r
1043+
}
1044+
1045+
define i32 @rotl_i32_add_greater(i32 %x, i32 %y) {
1046+
; CHECK-LABEL: @rotl_i32_add_greater(
1047+
; CHECK-NEXT: [[SUB:%.*]] = sub i32 33, [[Y:%.*]]
1048+
; CHECK-NEXT: [[SHL:%.*]] = shl i32 [[X:%.*]], [[Y]]
1049+
; CHECK-NEXT: [[SHR:%.*]] = lshr i32 [[X]], [[SUB]]
1050+
; CHECK-NEXT: [[R:%.*]] = or disjoint i32 [[SHR]], [[SHL]]
1051+
; CHECK-NEXT: ret i32 [[R]]
1052+
;
1053+
%sub = sub i32 33, %y
1054+
%shl = shl i32 %x, %y
1055+
%shr = lshr i32 %x, %sub
1056+
%r = add i32 %shr, %shl
1057+
ret i32 %r
1058+
}
1059+
1060+
define i32 @rotr_i32_add_greater(i32 %x, i32 %y) {
1061+
; CHECK-LABEL: @rotr_i32_add_greater(
1062+
; CHECK-NEXT: [[SUB:%.*]] = sub i32 34, [[Y:%.*]]
1063+
; CHECK-NEXT: [[SHL:%.*]] = lshr i32 [[X:%.*]], [[Y]]
1064+
; CHECK-NEXT: [[SHR:%.*]] = shl i32 [[X]], [[SUB]]
1065+
; CHECK-NEXT: [[R:%.*]] = or disjoint i32 [[SHR]], [[SHL]]
1066+
; CHECK-NEXT: ret i32 [[R]]
1067+
;
1068+
%sub = sub i32 34, %y
1069+
%shl = lshr i32 %x, %y
1070+
%shr = shl i32 %x, %sub
1071+
%r = add i32 %shr, %shl
1072+
ret i32 %r
1073+
}
1074+
1075+
define i32 @not_rotl_i32_add_less(i32 %x, i32 %y) {
1076+
; CHECK-LABEL: @not_rotl_i32_add_less(
1077+
; CHECK-NEXT: [[SUB:%.*]] = sub i32 31, [[Y:%.*]]
1078+
; CHECK-NEXT: [[SHL:%.*]] = shl i32 [[X:%.*]], [[Y]]
1079+
; CHECK-NEXT: [[SHR:%.*]] = lshr i32 [[X]], [[SUB]]
1080+
; CHECK-NEXT: [[R:%.*]] = add i32 [[SHR]], [[SHL]]
1081+
; CHECK-NEXT: ret i32 [[R]]
1082+
;
1083+
%sub = sub i32 31, %y
1084+
%shl = shl i32 %x, %y
1085+
%shr = lshr i32 %x, %sub
1086+
%r = add i32 %shr, %shl
1087+
ret i32 %r
1088+
}

0 commit comments

Comments
 (0)