[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