[llvm-commits] [llvm] r161262 - in /llvm/trunk: lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp test/CodeGen/X86/memcmp.ll tools/llc/llc.cpp

NAKAMURA Takumi geek4civic at gmail.com
Fri Aug 3 18:48:15 PDT 2012


Bob, it fails on msvc that lacks many libraries.

LLVM :: CodeGen/ARM/fabss.ll
LLVM :: CodeGen/ARM/fparith.ll
LLVM :: CodeGen/ARM/vfp.ll
LLVM :: CodeGen/CellSPU/fcmp32.ll
LLVM :: CodeGen/Hexagon/opt-fabs.ll
LLVM :: CodeGen/Mips/fabs.ll
LLVM :: CodeGen/X86/fabs.ll
LLVM :: CodeGen/X86/fp-in-intregs.ll
LLVM :: CodeGen/X86/rounding-ops.ll
LLVM :: CodeGen/X86/sincos.ll

Worked around in r161292.

...Takumi

2012/8/4 Bob Wilson <bob.wilson at apple.com>:
> Author: bwilson
> Date: Fri Aug  3 16:26:18 2012
> New Revision: 161262
>
> URL: http://llvm.org/viewvc/llvm-project?rev=161262&view=rev
> Log:
> Fix memcmp code-gen to honor -fno-builtin.
>
> I noticed that SelectionDAGBuilder::visitCall was missing a check for memcmp
> in TargetLibraryInfo, so that it would use custom code for memcmp calls even
> with -fno-builtin.  I also had to add a new -disable-simplify-libcalls option
> to llc so that I could write a test for this.
>
> Modified:
>     llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
>     llvm/trunk/test/CodeGen/X86/memcmp.ll
>     llvm/trunk/tools/llc/llc.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp?rev=161262&r1=161261&r2=161262&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp Fri Aug  3 16:26:18 2012
> @@ -5682,7 +5682,7 @@
>                                     Tmp.getValueType(), Tmp));
>            return;
>          }
> -      } else if (Name == "memcmp") {
> +      } else if ((LibInfo->has(LibFunc::memcmp) && Name == "memcmp")) {
>          if (visitMemCmpCall(I))
>            return;
>        }
>
> Modified: llvm/trunk/test/CodeGen/X86/memcmp.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/memcmp.ll?rev=161262&r1=161261&r2=161262&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/memcmp.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/memcmp.ll Fri Aug  3 16:26:18 2012
> @@ -1,4 +1,5 @@
>  ; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s
> +; RUN: llc < %s -disable-simplify-libcalls -mtriple=x86_64-linux | FileCheck %s --check-prefix=NOBUILTIN
>  ; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s
>
>  ; This tests codegen time inlining/optimization of memcmp
> @@ -23,6 +24,8 @@
>  ; CHECK: memcmp2:
>  ; CHECK: movw    ([[A0:%rdi|%rcx]]), %ax
>  ; CHECK: cmpw    ([[A1:%rsi|%rdx]]), %ax
> +; NOBUILTIN: memcmp2:
> +; NOBUILTIN: callq
>  }
>
>  define void @memcmp2a(i8* %X, i32* nocapture %P) nounwind {
>
> Modified: llvm/trunk/tools/llc/llc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=161262&r1=161261&r2=161262&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llc/llc.cpp (original)
> +++ llvm/trunk/tools/llc/llc.cpp Fri Aug  3 16:26:18 2012
> @@ -35,6 +35,7 @@
>  #include "llvm/Support/TargetRegistry.h"
>  #include "llvm/Support/TargetSelect.h"
>  #include "llvm/Target/TargetData.h"
> +#include "llvm/Target/TargetLibraryInfo.h"
>  #include "llvm/Target/TargetMachine.h"
>  #include <memory>
>  using namespace llvm;
> @@ -214,6 +215,11 @@
>    cl::init(false));
>
>  static cl::opt<bool>
> +DisableSimplifyLibCalls("disable-simplify-libcalls",
> +  cl::desc("Disable simplify-libcalls"),
> +  cl::init(false));
> +
> +static cl::opt<bool>
>  EnableGuaranteedTailCallOpt("tailcallopt",
>    cl::desc("Turn fastcc calls into tail calls by (potentially) changing ABI."),
>    cl::init(false));
> @@ -487,6 +493,12 @@
>    // Build up all of the passes that we want to do to the module.
>    PassManager PM;
>
> +  // Add an appropriate TargetLibraryInfo pass for the module's triple.
> +  TargetLibraryInfo *TLI = new TargetLibraryInfo(TheTriple);
> +  if (DisableSimplifyLibCalls)
> +    TLI->disableAllFunctions();
> +  PM.add(TLI);
> +
>    // Add the target data from the target machine, if it exists, or the module.
>    if (const TargetData *TD = Target.getTargetData())
>      PM.add(new TargetData(*TD));
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list