[llvm-commits] [llvm] r53459 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp test/CodeGen/X86/2008-07-11-SHLBy1.ll

Duncan Sands baldrick at free.fr
Fri Jul 11 09:54:57 PDT 2008


Author: baldrick
Date: Fri Jul 11 11:54:57 2008
New Revision: 53459

URL: http://llvm.org/viewvc/llvm-project?rev=53459&view=rev
Log:
Port a shift-by-1 optimization from LegalizeDAG: it
was presumably added after the rest of the code was
copied to LegalizeTypes.

Added:
    llvm/trunk/test/CodeGen/X86/2008-07-11-SHLBy1.ll
Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp?rev=53459&r1=53458&r2=53459&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp Fri Jul 11 11:54:57 2008
@@ -1556,6 +1556,13 @@
     } else if (Amt == NVTBits) {
       Lo = DAG.getConstant(0, NVT);
       Hi = InL;
+    } else if (Amt == 1) {
+      // Emit this X << 1 as X+X.
+      SDVTList VTList = DAG.getVTList(NVT, MVT::Flag);
+      SDOperand LoOps[2] = { InL, InL };
+      Lo = DAG.getNode(ISD::ADDC, VTList, LoOps, 2);
+      SDOperand HiOps[3] = { InH, InH, Lo.getValue(1) };
+      Hi = DAG.getNode(ISD::ADDE, VTList, HiOps, 3);
     } else {
       Lo = DAG.getNode(ISD::SHL, NVT, InL, DAG.getConstant(Amt, ShTy));
       Hi = DAG.getNode(ISD::OR, NVT,

Added: llvm/trunk/test/CodeGen/X86/2008-07-11-SHLBy1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2008-07-11-SHLBy1.ll?rev=53459&view=auto

==============================================================================
--- llvm/trunk/test/CodeGen/X86/2008-07-11-SHLBy1.ll (added)
+++ llvm/trunk/test/CodeGen/X86/2008-07-11-SHLBy1.ll Fri Jul 11 11:54:57 2008
@@ -0,0 +1,5 @@
+; RUN: llvm-as < %s | llc -march=x86-64 -o - | not grep shr
+define i128 @sl(i128 %x) {
+        %t = shl i128 %x, 1
+        ret i128 %t
+}





More information about the llvm-commits mailing list