[llvm] r226661 - [x32] Fast ISel should use LEA64_32r instead of LEA32r to adjust addresses in x32 mode.

Michael Kuperstein michael.m.kuperstein at intel.com
Wed Jan 21 06:44:06 PST 2015


Author: mkuper
Date: Wed Jan 21 08:44:05 2015
New Revision: 226661

URL: http://llvm.org/viewvc/llvm-project?rev=226661&view=rev
Log:
[x32] Fast ISel should use LEA64_32r instead of LEA32r to adjust addresses in x32 mode.

Added:
    llvm/trunk/test/CodeGen/X86/x32-lea-1.ll
Modified:
    llvm/trunk/lib/Target/X86/X86FastISel.cpp

Modified: llvm/trunk/lib/Target/X86/X86FastISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FastISel.cpp?rev=226661&r1=226660&r2=226661&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86FastISel.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86FastISel.cpp Wed Jan 21 08:44:05 2015
@@ -3224,7 +3224,10 @@ unsigned X86FastISel::X86MaterializeGV(c
               ResultReg)
         .addGlobalAddress(GV);
     } else {
-      unsigned Opc = TLI.getPointerTy() == MVT::i32 ? X86::LEA32r : X86::LEA64r;
+      unsigned Opc = TLI.getPointerTy() == MVT::i32
+                     ? (Subtarget->isTarget64BitILP32()
+                        ? X86::LEA64_32r : X86::LEA32r)
+                     : X86::LEA64r;
       addFullAddress(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc,
                              TII.get(Opc), ResultReg), AM);
     }
@@ -3266,7 +3269,10 @@ unsigned X86FastISel::fastMaterializeAll
   X86AddressMode AM;
   if (!X86SelectAddress(C, AM))
     return 0;
-  unsigned Opc = TLI.getPointerTy() == MVT::i32 ? X86::LEA32r : X86::LEA64r;
+  unsigned Opc = TLI.getPointerTy() == MVT::i32
+                 ? (Subtarget->isTarget64BitILP32()
+                    ? X86::LEA64_32r : X86::LEA32r)
+                 : X86::LEA64r;
   const TargetRegisterClass* RC = TLI.getRegClassFor(TLI.getPointerTy());
   unsigned ResultReg = createResultReg(RC);
   addFullAddress(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc,

Added: llvm/trunk/test/CodeGen/X86/x32-lea-1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x32-lea-1.ll?rev=226661&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/x32-lea-1.ll (added)
+++ llvm/trunk/test/CodeGen/X86/x32-lea-1.ll Wed Jan 21 08:44:05 2015
@@ -0,0 +1,10 @@
+; RUN: llc < %s -mtriple=x86_64-linux-gnux32 -O0 | FileCheck %s
+; CHECK: leal {{[-0-9]*}}(%r{{s|b}}p),
+; CHECK-NOT: leal {{[-0-9]*}}(%e{{s|b}}p),
+
+define void @foo(i32** %p) {
+  %a = alloca i32, i32 10
+  %addr = getelementptr i32* %a, i32 4
+  store i32* %addr, i32** %p
+  ret void
+}





More information about the llvm-commits mailing list