mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-30 23:33:57 +00:00
We have decided not to support inline asm where an output operand with a matching input operand with incompatible type (i.e. either one is a floating point and the other is an integer or the sizes of the types differ). SelectionDAGBuild will catch these and exit with an error.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61092 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8069f28a5d
commit
09dc9c0c83
@ -5048,20 +5048,21 @@ void SelectionDAGLowering::visitInlineAsm(CallSite CS) {
|
||||
SDISelAsmOperandInfo &OpInfo = ConstraintOperands[i];
|
||||
|
||||
// If this is an output operand with a matching input operand, look up the
|
||||
// matching input. It might have a different type (e.g. the output might be
|
||||
// i32 and the input i64) and we need to pick the larger width to ensure we
|
||||
// reserve the right number of registers.
|
||||
// matching input. If their types mismatch, e.g. one is an integer, the
|
||||
// other is floating point, or their sizes are different, flag it as an
|
||||
// error.
|
||||
if (OpInfo.hasMatchingInput()) {
|
||||
SDISelAsmOperandInfo &Input = ConstraintOperands[OpInfo.MatchingInput];
|
||||
if (OpInfo.ConstraintVT != Input.ConstraintVT) {
|
||||
assert(OpInfo.ConstraintVT.isInteger() &&
|
||||
Input.ConstraintVT.isInteger() &&
|
||||
"Asm constraints must be the same or different sized integers");
|
||||
if (OpInfo.ConstraintVT.getSizeInBits() <
|
||||
Input.ConstraintVT.getSizeInBits())
|
||||
OpInfo.ConstraintVT = Input.ConstraintVT;
|
||||
else
|
||||
Input.ConstraintVT = OpInfo.ConstraintVT;
|
||||
if ((OpInfo.ConstraintVT.isInteger() !=
|
||||
Input.ConstraintVT.isInteger()) ||
|
||||
(OpInfo.ConstraintVT.getSizeInBits() !=
|
||||
Input.ConstraintVT.getSizeInBits())) {
|
||||
cerr << "Unsupported asm: input constraint with a matching output "
|
||||
<< "constraint of incompatible type!\n";
|
||||
exit(1);
|
||||
}
|
||||
Input.ConstraintVT = OpInfo.ConstraintVT;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
; RUN: llvm-as < %s | llc
|
||||
; XFAIL: *
|
||||
; PR2356
|
||||
target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f128:64:128"
|
||||
target triple = "powerpc-apple-darwin9"
|
||||
|
Loading…
x
Reference in New Issue
Block a user