forked from OSchip/llvm-project
GlobalISel: stop the legalizer from trying to handle oddly-sized types.
It'll almost immediately fail because it always tries to half/double the size until it finds a legal one. Unfortunately, this triggers an assertion preventing the DAG fallback from being possible. llvm-svn: 288834
This commit is contained in:
parent
d0ccdb46b9
commit
405e25cd6a
|
@ -71,6 +71,11 @@ LegalizerInfo::getAction(const InstrAspect &Aspect) const {
|
|||
// These *have* to be implemented for now, they're the fundamental basis of
|
||||
// how everything else is transformed.
|
||||
|
||||
// Nothing is going to go well with types that aren't a power of 2 yet, so
|
||||
// don't even try because we might make things worse.
|
||||
if (!isPowerOf2_64(Aspect.Type.getSizeInBits()))
|
||||
return std::make_pair(Unsupported, LLT());
|
||||
|
||||
// FIXME: the long-term plan calls for expansion in terms of load/store (if
|
||||
// they're not legal).
|
||||
if (Aspect.Opcode == TargetOpcode::G_SEQUENCE ||
|
||||
|
|
|
@ -42,6 +42,7 @@ define [1 x double] @constant() {
|
|||
; PHI. If so, we cannot complete the G_PHI and mustn't try or bad things
|
||||
; happen.
|
||||
; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for pending_phis
|
||||
; FALLBACK-WITH-REPORT-OUT-LABEL: pending_phis:
|
||||
define i32 @pending_phis(i1 %tst, i32 %val, i32* %addr) {
|
||||
br i1 %tst, label %true, label %false
|
||||
|
||||
|
@ -57,3 +58,10 @@ false:
|
|||
br label %end
|
||||
|
||||
}
|
||||
|
||||
; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for odd_type
|
||||
; FALLBACK-WITH-REPORT-OUT-LABEL: odd_type:
|
||||
define void @odd_type(i42* %addr) {
|
||||
%val42 = load i42, i42* %addr
|
||||
ret void
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue