mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
CodeGenPrep: fall back to MVT::Other if instruction's type isn't an EVT.
The test being performed is just an approximation anyway, so it really shouldn't crash when things don't go entirely as expected. Should fix PR20474. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214177 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
30ef915bb4
commit
6f800f7333
@ -662,10 +662,13 @@ SinkShiftAndTruncate(BinaryOperator *ShiftI, Instruction *User, ConstantInt *CI,
|
||||
if (!ISDOpcode)
|
||||
continue;
|
||||
|
||||
// If the use is actually a legal node, there will not be an implicit
|
||||
// truncate.
|
||||
// If the use is actually a legal node, there will not be an
|
||||
// implicit truncate.
|
||||
// FIXME: always querying the result type is just an
|
||||
// approximation; some nodes' legality is determined by the
|
||||
// operand or other means. There's no good way to find out though.
|
||||
if (TLI.isOperationLegalOrCustom(ISDOpcode,
|
||||
EVT::getEVT(TruncUser->getType())))
|
||||
EVT::getEVT(TruncUser->getType(), true)))
|
||||
continue;
|
||||
|
||||
// Don't bother for PHI nodes.
|
||||
|
3
test/Transforms/CodeGenPrepare/AArch64/lit.local.cfg
Normal file
3
test/Transforms/CodeGenPrepare/AArch64/lit.local.cfg
Normal file
@ -0,0 +1,3 @@
|
||||
if not 'AArch64' in config.root.targets:
|
||||
config.unsupported = True
|
||||
|
17
test/Transforms/CodeGenPrepare/AArch64/trunc-weird-user.ll
Normal file
17
test/Transforms/CodeGenPrepare/AArch64/trunc-weird-user.ll
Normal file
@ -0,0 +1,17 @@
|
||||
; RUN: opt -S -codegenprepare -mtriple=arm64-apple-ios7.0 %s | FileCheck %s
|
||||
|
||||
%foo = type { i8 }
|
||||
|
||||
define %foo @test_merge(i32 %in) {
|
||||
; CHECK-LABEL: @test_merge
|
||||
|
||||
; CodeGenPrepare was requesting the EVT for { i8 } to determine
|
||||
; whether the insertvalue user of the trunc was legal. This
|
||||
; asserted.
|
||||
|
||||
; CHECK: insertvalue %foo undef, i8 %byte, 0
|
||||
%lobit = lshr i32 %in, 31
|
||||
%byte = trunc i32 %lobit to i8
|
||||
%struct = insertvalue %foo undef, i8 %byte, 0
|
||||
ret %"foo" %struct
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user