Skip to content

Commit

Permalink
[ARM] TypeSize lower bound for ARMCodeGenPrepare
Browse files Browse the repository at this point in the history
We only try to promote types with are smaller than 16-bits, but we
also need to check that the type is not less than 8-bits.

Differential Revision: https://reviews.llvm.org/D50769

llvm-svn: 339770
  • Loading branch information
sparker-arm committed Aug 15, 2018
1 parent 8b4bd09 commit fabf7fe
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARM/ARMCodeGenPrepare.cpp
Expand Up @@ -562,7 +562,7 @@ bool ARMCodeGenPrepare::isLegalToPromote(Value *V) {
bool ARMCodeGenPrepare::TryToPromote(Value *V) {
OrigTy = V->getType();
TypeSize = OrigTy->getPrimitiveSizeInBits();
if (TypeSize > 16)
if (TypeSize > 16 || TypeSize < 8)
return false;

if (!isSupportedValue(V) || !shouldPromote(V) || !isLegalToPromote(V))
Expand Down
24 changes: 24 additions & 0 deletions llvm/test/CodeGen/ARM/arm-cgp-icmps.ll
Expand Up @@ -256,3 +256,27 @@ define i32 @icmp_not(i16 zeroext %arg0, i16 zeroext %arg1) {
ret i32 %res
}

; CHECK-COMMON-LABEL: icmp_i1
; CHECK-NOT: uxt
define i32 @icmp_i1(i1* %arg0, i1 zeroext %arg1, i32 %a, i32 %b) {
entry:
%load = load i1, i1* %arg0
%not = xor i1 %load, 1
%cmp = icmp eq i1 %arg1, %not
%res = select i1 %cmp, i32 %a, i32 %b
ret i32 %res
}

; CHECK-COMMON-LABEL: icmp_i7
; CHECK-COMMON: ldrb
; CHECK-COMMON: and
; CHECK-COMMON: cmp
define i32 @icmp_i7(i7* %arg0, i7 zeroext %arg1, i32 %a, i32 %b) {
entry:
%load = load i7, i7* %arg0
%add = add nuw i7 %load, 1
%cmp = icmp ult i7 %arg1, %add
%res = select i1 %cmp, i32 %a, i32 %b
ret i32 %res
}

0 comments on commit fabf7fe

Please sign in to comment.