[llvm-commits] [llvm] r56885 - in /llvm/trunk: include/llvm/Target/TargetLowering.h lib/CodeGen/SelectionDAG/SelectionDAG.cpp lib/Target/X86/X86ISelLowering.cpp lib/Target/X86/X86ISelLowering.h lib/Target/X86/X86Subtarget.cpp lib/Target/X86/X86Subtarget.h
Devang Patel
dpatel at apple.com
Tue Sep 30 14:49:15 PDT 2008
On Sep 30, 2008, at 2:22 PM, Bill Wendling wrote:
> Author: void
> Date: Tue Sep 30 16:22:07 2008
> New Revision: 56885
>
> URL: http://llvm.org/viewvc/llvm-project?rev=56885&view=rev
> Log:
> Add the new `-no-builtin' flag. This flag is meant to mimic the GCC
> `-fno-builtin' flag. Currently, it's used to replace "memset" with
> "_bzero"
> instead of "__bzero" on Darwin10+. This arguably violates the
> meaning of this
> flag, but is currently sufficient. The meaning of this flag should
> become more
> specific over time.
Is it possible encode this in IR as an attribute ?
Right now this info. is lost during
1) llvm-gcc -c --emit-llvm -fno-builtin foo.c -o foo.bc && llc foo.bc -
o foo.s
2) and LTO.
-
Devang
>
>
> Modified:
> llvm/trunk/include/llvm/Target/TargetLowering.h
> llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> llvm/trunk/lib/Target/X86/X86ISelLowering.h
> llvm/trunk/lib/Target/X86/X86Subtarget.cpp
> llvm/trunk/lib/Target/X86/X86Subtarget.h
>
> Modified: llvm/trunk/include/llvm/Target/TargetLowering.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=56885&r1=56884&r2=56885&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/include/llvm/Target/TargetLowering.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetLowering.h Tue Sep 30
> 16:22:07 2008
> @@ -1049,7 +1049,8 @@
> SDValue Chain,
> SDValue Op1, SDValue Op2,
> SDValue Op3, unsigned Align,
> - const Value *DstSV, uint64_t DstOff) {
> + const Value *DstSV, uint64_t DstOff,
> + bool NoBuiltin = false) {
> return SDValue();
> }
>
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=56885&r1=56884&r2=56885&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Tue Sep 30
> 16:22:07 2008
> @@ -29,6 +29,7 @@
> #include "llvm/Target/TargetLowering.h"
> #include "llvm/Target/TargetInstrInfo.h"
> #include "llvm/Target/TargetMachine.h"
> +#include "llvm/Support/CommandLine.h"
> #include "llvm/Support/MathExtras.h"
> #include "llvm/Support/raw_ostream.h"
> #include "llvm/ADT/SetVector.h"
> @@ -40,6 +41,11 @@
> #include <cmath>
> using namespace llvm;
>
> +static cl::opt<bool>
> +NoBuiltin("no-builtin",
> + cl::desc("Don't recognize built-in functions that do not
> begin "
> + "with `__builtin_' as prefix"));
> +
> /// makeVTList - Return an instance of the SDVTList struct
> initialized with the
> /// specified members.
> static SDVTList makeVTList(const MVT *VTs, unsigned NumVTs) {
> @@ -3189,7 +3195,7 @@
> // code. If the target chooses to do this, this is the next best.
> SDValue Result =
> TLI.EmitTargetCodeForMemset(*this, Chain, Dst, Src, Size, Align,
> - DstSV, DstSVOff);
> + DstSV, DstSVOff, NoBuiltin);
> if (Result.getNode())
> return Result;
>
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=56885&r1=56884&r2=56885&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Sep 30
> 16:22:07 2008
> @@ -5128,15 +5128,17 @@
>
> SDValue
> X86TargetLowering::EmitTargetCodeForMemset(SelectionDAG &DAG,
> - SDValue Chain,
> - SDValue Dst, SDValue Src,
> - SDValue Size, unsigned Align,
> - const Value *DstSV,
> uint64_t DstSVOff) {
> + SDValue Chain,
> + SDValue Dst, SDValue Src,
> + SDValue Size, unsigned
> Align,
> + const Value *DstSV,
> + uint64_t DstSVOff,
> + bool NoBuiltin) {
> ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
>
> - /// If not DWORD aligned or size is more than the threshold, call
> the library.
> - /// The libc version is likely to be faster for these cases. It
> can use the
> - /// address value and run time information about the CPU.
> + // If not DWORD aligned or size is more than the threshold, call
> the library.
> + // The libc version is likely to be faster for these cases. It
> can use the
> + // address value and run time information about the CPU.
> if ((Align & 3) != 0 ||
> !ConstantSize ||
> ConstantSize->getZExtValue() >
> @@ -5145,8 +5147,9 @@
>
> // Check to see if there is a specialized entry-point for memory
> zeroing.
> ConstantSDNode *V = dyn_cast<ConstantSDNode>(Src);
> - if (const char *bzeroEntry =
> - V && V->isNullValue() ? Subtarget->getBZeroEntry() : 0) {
> +
> + if (const char *bzeroEntry = V &&
> + V->isNullValue() ? Subtarget->getBZeroEntry(NoBuiltin) : 0) {
> MVT IntPtr = getPointerTy();
> const Type *IntPtrTy = TD->getIntPtrType();
> TargetLowering::ArgListTy Args;
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=56885&r1=56884&r2=56885&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Tue Sep 30 16:22:07
> 2008
> @@ -575,17 +575,18 @@
> SDNode *ExpandATOMIC_CMP_SWAP(SDNode *N, SelectionDAG &DAG);
>
> SDValue EmitTargetCodeForMemset(SelectionDAG &DAG,
> - SDValue Chain,
> - SDValue Dst, SDValue Src,
> - SDValue Size, unsigned Align,
> - const Value *DstSV, uint64_t
> DstSVOff);
> + SDValue Chain,
> + SDValue Dst, SDValue Src,
> + SDValue Size, unsigned Align,
> + const Value *DstSV, uint64_t
> DstSVOff,
> + bool NoBuiltin);
> SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG,
> - SDValue Chain,
> - SDValue Dst, SDValue Src,
> - SDValue Size, unsigned Align,
> - bool AlwaysInline,
> - const Value *DstSV, uint64_t
> DstSVOff,
> - const Value *SrcSV, uint64_t
> SrcSVOff);
> + SDValue Chain,
> + SDValue Dst, SDValue Src,
> + SDValue Size, unsigned Align,
> + bool AlwaysInline,
> + const Value *DstSV, uint64_t
> DstSVOff,
> + const Value *SrcSV, uint64_t
> SrcSVOff);
>
> /// Utility function to emit atomic bitwise operations (and, or,
> xor).
> // It takes the bitwise instruction to expand, the associated
> machine basic
>
> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=56885&r1=56884&r2=56885&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Tue Sep 30 16:22:07
> 2008
> @@ -59,16 +59,14 @@
> return false;
> }
>
> -/// This function returns the name of a function which has an
> interface
> -/// like the non-standard bzero function, if such a function exists
> on
> -/// the current subtarget and it is considered prefereable over
> -/// memset with zero passed as the second argument. Otherwise it
> -/// returns null.
> -const char *X86Subtarget::getBZeroEntry() const {
> -
> +/// getBZeroEntry - This function returns the name of a function
> which has an
> +/// interface like the non-standard bzero function, if such a
> function exists on
> +/// the current subtarget and it is considered prefereable over
> memset with zero
> +/// passed as the second argument. Otherwise it returns null.
> +const char *X86Subtarget::getBZeroEntry(bool NoBuiltin) const {
> // Darwin 10 has a __bzero entry point for this purpose.
> if (getDarwinVers() >= 10)
> - return "__bzero";
> + return NoBuiltin ? "_bzero" : "__bzero";
>
> return 0;
> }
>
> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=56885&r1=56884&r2=56885&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original)
> +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Tue Sep 30 16:22:07 2008
> @@ -184,7 +184,7 @@
> /// the current subtarget and it is considered prefereable over
> /// memset with zero passed as the second argument. Otherwise it
> /// returns null.
> - const char *getBZeroEntry() const;
> + const char *getBZeroEntry(bool NoBuiltin) const;
> };
>
> namespace X86 {
>
>
> _______________________________________________
> 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