mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-30 19:35:54 +00:00
AArch64: Relax assert about large shift sizes.
The reason why these large shift sizes happen is because OpaqueConstants currently inhibit alot of DAG combining, but that has to be addressed in another commit (like the proposal in D6946). Differential Revision: http://reviews.llvm.org/D6940 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230355 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8b1add3c13
commit
dd1a6e074d
@ -1397,8 +1397,10 @@ static bool isBitfieldExtractOpFromAnd(SelectionDAG *CurDAG, SDNode *N,
|
||||
} else
|
||||
return false;
|
||||
|
||||
assert((BiggerPattern || (Srl_imm > 0 && Srl_imm < VT.getSizeInBits())) &&
|
||||
"bad amount in shift node!");
|
||||
// Bail out on large immediates. This happens when no proper
|
||||
// combining/constant folding was performed.
|
||||
if (!BiggerPattern && (Srl_imm <= 0 || Srl_imm >= VT.getSizeInBits()))
|
||||
return false;
|
||||
|
||||
LSB = Srl_imm;
|
||||
MSB = Srl_imm + (VT == MVT::i32 ? countTrailingOnes<uint32_t>(And_imm)
|
||||
@ -1502,7 +1504,11 @@ static bool isBitfieldExtractOpFromShr(SDNode *N, unsigned &Opc, SDValue &Opd0,
|
||||
} else
|
||||
return false;
|
||||
|
||||
assert(Shl_imm < VT.getSizeInBits() && "bad amount in shift node!");
|
||||
// Missing combines/constant folding may have left us with strange
|
||||
// constants.
|
||||
if (Shl_imm >= VT.getSizeInBits())
|
||||
return false;
|
||||
|
||||
uint64_t Srl_imm = 0;
|
||||
if (!isIntImmediate(N->getOperand(1), Srl_imm))
|
||||
return false;
|
||||
|
21
test/CodeGen/AArch64/large_shift.ll
Normal file
21
test/CodeGen/AArch64/large_shift.ll
Normal file
@ -0,0 +1,21 @@
|
||||
; RUN: llc -march=aarch64 -o - %s
|
||||
target triple = "arm64-unknown-unknown"
|
||||
|
||||
; Make sure we don't run into an assert in the aarch64 code selection when
|
||||
; DAGCombining fails.
|
||||
|
||||
declare void @t()
|
||||
|
||||
define void @foo() {
|
||||
%c = bitcast i64 270458 to i64
|
||||
%t0 = lshr i64 %c, 422383
|
||||
%t1 = trunc i64 %t0 to i1
|
||||
br i1 %t1, label %BB1, label %BB0
|
||||
|
||||
BB0:
|
||||
call void @t()
|
||||
br label %BB1
|
||||
|
||||
BB1:
|
||||
ret void
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user