[fast-isel] Add support for returning non-legal types with no sign- or zero-

entend flag.

llvm-svn: 150774
This commit is contained in:
Chad Rosier 2012-02-17 01:21:28 +00:00
parent d9f2152a2e
commit fcd29ae390
2 changed files with 15 additions and 6 deletions

View File

@ -2037,14 +2037,14 @@ bool ARMFastISel::SelectRet(const Instruction *I) {
if (RVVT != MVT::i1 && RVVT != MVT::i8 && RVVT != MVT::i16)
return false;
if (!Outs[0].Flags.isZExt() && !Outs[0].Flags.isSExt())
return false;
assert(DestVT == MVT::i32 && "ARM should always ext to i32");
bool isZExt = Outs[0].Flags.isZExt();
SrcReg = ARMEmitIntExt(RVVT, SrcReg, DestVT, isZExt);
if (SrcReg == 0) return false;
// Perform extension if flagged as either zext or sext. Otherwise, do
// nothing.
if (Outs[0].Flags.isZExt() || Outs[0].Flags.isSExt()) {
SrcReg = ARMEmitIntExt(RVVT, SrcReg, DestVT, Outs[0].Flags.isZExt());
if (SrcReg == 0) return false;
}
}
// Make the copy.

View File

@ -46,3 +46,12 @@ entry:
; CHECK: bx lr
ret i16 %a
}
define i16 @ret6(i16 %a) nounwind uwtable ssp {
entry:
; CHECK: ret6
; CHECK-NOT: uxth
; CHECK-NOT: sxth
; CHECK: bx lr
ret i16 %a
}