From baa40c68ace84fe36739b0dbd335b6100be19e97 Mon Sep 17 00:00:00 2001 From: Juergen Ributzka Date: Tue, 5 Aug 2014 07:31:30 +0000 Subject: [PATCH] [FastIsel][AArch64] Fix previous commit r214844 (Don't perform sign-/zero-extension for function arguments that have already been sign-/zero-extended.) The original code would fail for unsupported value types like i1, i8, and i16. This fix changes the code to only create a sub-register copy for i64 value types and all other types (i1/i8/i16/i32) just use the source register without any modifications. getRegClassFor() is now guarded by the i64 value type check, that guarantees that we always request a register for a valid value type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214848 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/AArch64/AArch64FastISel.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/Target/AArch64/AArch64FastISel.cpp b/lib/Target/AArch64/AArch64FastISel.cpp index 7aebf4be042..7919e47f5df 100644 --- a/lib/Target/AArch64/AArch64FastISel.cpp +++ b/lib/Target/AArch64/AArch64FastISel.cpp @@ -2443,17 +2443,15 @@ bool AArch64FastISel::SelectIntExt(const Instruction *I) { // Check if it is an argument and if it is already zero/sign-extended. if (const auto *Arg = dyn_cast(Src)) { if ((isZExt && Arg->hasZExtAttr()) || (!isZExt && Arg->hasSExtAttr())) { - ResultReg = createResultReg(TLI.getRegClassFor(DestVT)); - if (DestVT == MVT::i64) + if (DestVT == MVT::i64) { + ResultReg = createResultReg(TLI.getRegClassFor(DestVT)); BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AArch64::SUBREG_TO_REG), ResultReg) .addImm(0) .addReg(SrcReg) .addImm(AArch64::sub_32); - else - BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, - TII.get(TargetOpcode::COPY), ResultReg) - .addReg(SrcReg); + } else + ResultReg = SrcReg; } } -- 2.34.1