forked from OSchip/llvm-project
[InstCombine] add test and code comment to show potentially misguided icmp trunc transform
llvm-svn: 285075
This commit is contained in:
parent
bd449c27d5
commit
d59f7f9047
|
@ -1950,6 +1950,9 @@ Instruction *InstCombiner::foldICmpShlConstant(ICmpInst &Cmp,
|
|||
And, Constant::getNullValue(And->getType()));
|
||||
}
|
||||
|
||||
// FIXME: This transform can create illegal types. Use the DataLayout to
|
||||
// decide when to try this?
|
||||
|
||||
// Transform (icmp pred iM (shl iM %v, N), C)
|
||||
// -> (icmp pred i(M-N) (trunc %v iM to i(M-N)), (trunc (C>>N))
|
||||
// Transform the shl to a trunc if (trunc (C>>N)) has no loss and M-N.
|
||||
|
|
|
@ -1208,6 +1208,19 @@ define i1 @icmp_shl16(i32 %x) {
|
|||
ret i1 %cmp
|
||||
}
|
||||
|
||||
; FIXME: We shouldn't be creating illegal types like i15 in InstCombine.
|
||||
|
||||
define i1 @icmp_shl17(i32 %x) {
|
||||
; CHECK-LABEL: @icmp_shl17(
|
||||
; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 %x to i15
|
||||
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i15 [[TMP1]], 18
|
||||
; CHECK-NEXT: ret i1 [[CMP]]
|
||||
;
|
||||
%shl = shl i32 %x, 17
|
||||
%cmp = icmp slt i32 %shl, 2359296
|
||||
ret i1 %cmp
|
||||
}
|
||||
|
||||
define <2 x i1> @icmp_shl16_vec(<2 x i32> %x) {
|
||||
; CHECK-LABEL: @icmp_shl16_vec(
|
||||
; CHECK-NEXT: [[TMP1:%.*]] = trunc <2 x i32> %x to <2 x i16>
|
||||
|
|
Loading…
Reference in New Issue