[llvm-commits] [llvm] r47703 - in /llvm/trunk: include/llvm/CodeGen/ include/llvm/Target/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/Target/ARM/ lib/Target/Alpha/ lib/Target/CellSPU/ lib/Target/IA64/ lib/Target/Mips/ lib/Target/PowerPC/ lib/Target/Sparc/ lib/Target/X86/

Dan Gohman gohman at apple.com
Thu Feb 28 14:50:34 PST 2008


During the test run:

******************** TEST (llc) 'exception_spec_test' FAILED!  
********************
Execution Context Diff:
/Users/gohman/LLVM/build.llvm.x86-64/Debug/bin/fpcmp: FP Comparison  
failed, not a numeric difference
between 'T' and 't'
******************** TEST (llc) 'exception_spec_test'  
****************************


The difff between the native an llc outputs looks like this:

--- exception_spec_test.out-nat	2008-02-28 14:48:09.000000000 -0800
+++ exception_spec_test.out-llc	2008-02-28 14:48:09.000000000 -0800
@@ -1,9 +1,4 @@
+terminate called after throwing an instance of 'int'
  Throwing a double from a function which allows doubles!
-Double successfully caught!
-Throwing an int from a function which only allows doubles!
-std::unexpected called: throwing a double
-Double successfully caught!
-Throwing an int from a function which only allows doubles!
  std::unexpected called: throwing an int!
-std::terminate called
-exit 1
+exit 134


Also, I just reran this with 47732 and it still fails.

Dan

On Feb 28, 2008, at 2:26 PM, Evan Cheng wrote:

> Thanks. Can you tell how is it failing?
>
> Evan
>
> On Feb 28, 2008, at 1:41 PM, Dan Gohman wrote:
>
>> Hi Evan,
>>
>> This is causing failures on x86-64 too:
>>
>> Regression/C++/EH/exception_spec_test [LLC compile, LLC-BETA
>> compile, , ]
>> Regression/C++/EH/function_try_block [LLC compile, LLC-BETA
>> compile, , ]
>>
>> Dan
>>
>> On Feb 27, 2008, at 4:43 PM, Evan Cheng wrote:
>>
>>> Author: evancheng
>>> Date: Wed Feb 27 18:43:03 2008
>>> New Revision: 47703
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=47703&view=rev
>>> Log:
>>> Add a quick and dirty "loop aligner pass". x86 uses it to align its
>>> loops to 16-byte boundaries.
>>>
>>> Added:
>>>  llvm/trunk/lib/CodeGen/LoopAligner.cpp
>>> Modified:
>>>  llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
>>>  llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h
>>>  llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h
>>>  llvm/trunk/include/llvm/CodeGen/Passes.h
>>>  llvm/trunk/include/llvm/Target/TargetAsmInfo.h
>>>  llvm/trunk/include/llvm/Target/TargetLowering.h
>>>  llvm/trunk/lib/CodeGen/AsmPrinter.cpp
>>>  llvm/trunk/lib/CodeGen/BranchFolding.cpp
>>>  llvm/trunk/lib/CodeGen/IfConversion.cpp
>>>  llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp
>>>  llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
>>>  llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
>>>  llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp
>>>  llvm/trunk/lib/Target/CellSPU/SPUAsmPrinter.cpp
>>>  llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp
>>>  llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp
>>>  llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp
>>>  llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp
>>>  llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp
>>>  llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>>>  llvm/trunk/lib/Target/X86/X86IntelAsmPrinter.cpp
>>>  llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
>>>  llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
>>>  llvm/trunk/lib/Target/X86/X86TargetMachine.h
>>>
>>> Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
>>> +++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Wed Feb 27 18:43:03
>>> 2008
>>> @@ -78,6 +78,10 @@
>>>   /// CurrentSection - The current section we are emitting to.
>>> This is
>>>   /// controlled and used by the SwitchSection method.
>>>   std::string CurrentSection;
>>> +
>>> +    /// IsInTextSection - True if the current section we are
>>> emitting to is a
>>> +    /// text section.
>>> +    bool IsInTextSection;
>>>
>>> protected:
>>>   AsmPrinter(std::ostream &o, TargetMachine &TM, const
>>> TargetAsmInfo *T);
>>> @@ -269,9 +273,7 @@
>>>   /// an explicit alignment requested, it will unconditionally
>>> override the
>>>   /// alignment request.  However, if ForcedAlignBits is
>>> specified, this value
>>>   /// has final say: the ultimate alignment will be the max of
>>> ForcedAlignBits
>>> -    /// and the alignment computed with NumBits and the global. If
>>> UseFillExpr
>>> -    /// is true, it also emits an optional second value FillValue
>>> which the
>>> -    /// assembler uses to fill gaps to match alignment.
>>> +    /// and the alignment computed with NumBits and the global
>>>   ///
>>>   /// The algorithm is:
>>>   ///     Align = NumBits;
>>> @@ -279,8 +281,7 @@
>>>   ///     Align = std::max(Align, ForcedAlignBits);
>>>   ///
>>>   void EmitAlignment(unsigned NumBits, const GlobalValue *GV = 0,
>>> -                       unsigned ForcedAlignBits = 0, bool
>>> UseFillExpr = false,
>>> -                       unsigned FillValue = 0) const;
>>> +                       unsigned ForcedAlignBits = 0) const;
>>>
>>>   /// printLabel - This method prints a local label used by debug
>>> and
>>>   /// exception handling tables.
>>> @@ -317,6 +318,7 @@
>>>   /// printBasicBlockLabel - This method prints the label for the
>>> specified
>>>   /// MachineBasicBlock
>>>   virtual void printBasicBlockLabel(const MachineBasicBlock *MBB,
>>> +                                      bool printAlign = false,
>>>                                     bool printColon = false,
>>>                                     bool printComment = true) const;
>>>
>>>
>>> Modified: llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h (original)
>>> +++ llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h Wed Feb 27
>>> 18:43:03 2008
>>> @@ -75,6 +75,10 @@
>>> /// LiveIns - Keep track of the physical registers that are livein
>>> of
>>> /// the basicblock.
>>> std::vector<unsigned> LiveIns;
>>> +
>>> +  /// Alignment - Alignment of the basic block. Zero if the basic
>>> block does
>>> +  /// not need to be aligned.
>>> +  unsigned Alignment;
>>>
>>> /// IsLandingPad - Indicate that this basic block is entered via an
>>> /// exception handler.
>>> @@ -82,7 +86,8 @@
>>>
>>> public:
>>> explicit MachineBasicBlock(const BasicBlock *bb = 0)
>>> -    : Prev(0), Next(0), BB(bb), Number(-1), xParent(0),
>>> IsLandingPad(false) {
>>> +    : Prev(0), Next(0), BB(bb), Number(-1), xParent(0),
>>> +      Alignment(0), IsLandingPad(false) {
>>>   Insts.parent = this;
>>> }
>>>
>>> @@ -181,6 +186,14 @@
>>> const_livein_iterator livein_end()   const { return LiveIns.end(); }
>>> bool            livein_empty() const { return LiveIns.empty(); }
>>>
>>> +  /// getAlignment - Return alignment of the basic block.
>>> +  ///
>>> +  unsigned getAlignment() const { return Alignment; }
>>> +
>>> +  /// setAlignment - Set alignment of the basic block.
>>> +  ///
>>> +  void setAlignment(unsigned Align) { Alignment = Align; }
>>> +
>>> /// isLandingPad - Returns true if the block is a landing pad.
>>> That is
>>> /// this basic block is entered via an exception handler.
>>> bool isLandingPad() const { return IsLandingPad; }
>>>
>>> Modified: llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h (original)
>>> +++ llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h Wed Feb 27
>>> 18:43:03 2008
>>> @@ -204,7 +204,7 @@
>>> }
>>>
>>> /// getObjectAlignment - Return the alignment of the specified
>>> stack object...
>>> -  int getObjectAlignment(int ObjectIdx) const {
>>> +  unsigned getObjectAlignment(int ObjectIdx) const {
>>>   assert(unsigned(ObjectIdx+NumFixedObjects) < Objects.size() &&
>>>          "Invalid Object Idx!");
>>>   return Objects[ObjectIdx+NumFixedObjects].Alignment;
>>>
>>> Modified: llvm/trunk/include/llvm/CodeGen/Passes.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/Passes.h?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/include/llvm/CodeGen/Passes.h (original)
>>> +++ llvm/trunk/include/llvm/CodeGen/Passes.h Wed Feb 27 18:43:03  
>>> 2008
>>> @@ -129,6 +129,10 @@
>>> /// IfConverter Pass - This pass performs machine code if
>>> conversion.
>>> FunctionPass *createIfConverterPass();
>>>
>>> +  /// LoopAligner Pass - This pass aligns loop headers to target
>>> specific
>>> +  /// alignment boundary.
>>> +  FunctionPass *createLoopAlignerPass();
>>> +
>>> /// DebugLabelFoldingPass - This pass prunes out redundant debug
>>> labels.  This
>>> /// allows a debug emitter to determine if the range of two labels
>>> is empty,
>>> /// by seeing if the labels map to the same reduced label.
>>>
>>> Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
>>> +++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Wed Feb 27
>>> 18:43:03 2008
>>> @@ -164,6 +164,10 @@
>>>   /// boundary.
>>>   bool AlignmentIsInBytes;              // Defaults to true
>>>
>>> +    /// TextAlignFillValue - If non-zero, this is used to fill the
>>> executable
>>> +    /// space created as the result of a alignment directive.
>>> +    unsigned TextAlignFillValue;
>>> +
>>>   //===--- Section Switching Directives
>>> ---------------------------------===//
>>>
>>>   /// SwitchToSectionDirective - This is the directive used when
>>> we want to
>>> @@ -503,6 +507,9 @@
>>>   bool getAlignmentIsInBytes() const {
>>>     return AlignmentIsInBytes;
>>>   }
>>> +    unsigned getTextAlignFillValue() const {
>>> +      return TextAlignFillValue;
>>> +    }
>>>   const char *getSwitchToSectionDirective() const {
>>>     return SwitchToSectionDirective;
>>>   }
>>>
>>> Modified: llvm/trunk/include/llvm/Target/TargetLowering.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/include/llvm/Target/TargetLowering.h (original)
>>> +++ llvm/trunk/include/llvm/Target/TargetLowering.h Wed Feb 27
>>> 18:43:03 2008
>>> @@ -548,17 +548,23 @@
>>>
>>> /// getIfCvtBlockLimit - returns the target specific if-conversion
>>> block size
>>> /// limit. Any block whose size is greater should not be predicated.
>>> -  virtual unsigned getIfCvtBlockSizeLimit() const {
>>> +  unsigned getIfCvtBlockSizeLimit() const {
>>>   return IfCvtBlockSizeLimit;
>>> }
>>>
>>> /// getIfCvtDupBlockLimit - returns the target specific size limit
>>> for a
>>> /// block to be considered for duplication. Any block whose size
>>> is greater
>>> /// should not be duplicated to facilitate its predication.
>>> -  virtual unsigned getIfCvtDupBlockSizeLimit() const {
>>> +  unsigned getIfCvtDupBlockSizeLimit() const {
>>>   return IfCvtDupBlockSizeLimit;
>>> }
>>>
>>> +  /// getPrefLoopAlignment - return the preferred loop alignment.
>>> +  ///
>>> +  unsigned getPrefLoopAlignment() const {
>>> +    return PrefLoopAlignment;
>>> +  }
>>> +
>>> /// getPreIndexedAddressParts - returns true by value, base
>>> pointer and
>>> /// offset pointer and addressing mode by reference if the node's
>>> address
>>> /// can be legally represented as pre-indexed load / store address.
>>> @@ -583,7 +589,7 @@
>>> /// jumptable.
>>> virtual SDOperand getPICJumpTableRelocBase(SDOperand Table,
>>>                                            SelectionDAG &DAG) const;
>>> -
>>> +
>>> //
>>> =
>>> =
>>> = 
>>> --------------------------------------------------------------------
>>> ===//
>>> // TargetLowering Optimization Methods
>>> //
>>> @@ -890,6 +896,12 @@
>>> void setIfCvtDupBlockSizeLimit(unsigned Limit) {
>>>   IfCvtDupBlockSizeLimit = Limit;
>>> }
>>> +
>>> +  /// setPrefLoopAlignment - Set the target's preferred loop
>>> alignment. Default
>>> +  /// alignment is zero, it means the target does not care about
>>> loop alignment.
>>> +  void setPrefLoopAlignment(unsigned Align) {
>>> +    PrefLoopAlignment = Align;
>>> +  }
>>>
>>> public:
>>>
>>> @@ -1276,6 +1288,10 @@
>>> /// duplicated during if-conversion.
>>> unsigned IfCvtDupBlockSizeLimit;
>>>
>>> +  /// PrefLoopAlignment - The perferred loop alignment.
>>> +  ///
>>> +  unsigned PrefLoopAlignment;
>>> +
>>> /// StackPointerRegisterToSaveRestore - If set to a physical
>>> register, this
>>> /// specifies the register that llvm.savestack/llvm.restorestack
>>> should save
>>> /// and restore.
>>>
>>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/CodeGen/AsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/AsmPrinter.cpp Wed Feb 27 18:43:03 2008
>>> @@ -39,7 +39,8 @@
>>> char AsmPrinter::ID = 0;
>>> AsmPrinter::AsmPrinter(std::ostream &o, TargetMachine &tm,
>>>                      const TargetAsmInfo *T)
>>> -  : MachineFunctionPass((intptr_t)&ID), FunctionNumber(0), O(o),
>>> TM(tm), TAI(T)
>>> +  : MachineFunctionPass((intptr_t)&ID), FunctionNumber(0), O(o),
>>> TM(tm), TAI(T),
>>> +    IsInTextSection(false)
>>> {}
>>>
>>> std::string AsmPrinter::getSectionForFunction(const Function &F)
>>> const {
>>> @@ -69,6 +70,8 @@
>>>
>>> if (!CurrentSection.empty())
>>>   O << CurrentSection << TAI->getTextSectionStartSuffix() << '\n';
>>> +
>>> +  IsInTextSection = true;
>>> }
>>>
>>> /// SwitchToDataSection - Switch to the specified data section of
>>> the executable
>>> @@ -93,6 +96,8 @@
>>>
>>> if (!CurrentSection.empty())
>>>   O << CurrentSection << TAI->getDataSectionStartSuffix() << '\n';
>>> +
>>> +  IsInTextSection = false;
>>> }
>>>
>>>
>>> @@ -344,7 +349,7 @@
>>>     O << TAI->getPrivateGlobalPrefix() << getFunctionNumber()
>>>       << '_' << uid << "_set_" << MBB->getNumber();
>>>   } else {
>>> -      printBasicBlockLabel(MBB, false, false);
>>> +      printBasicBlockLabel(MBB, false, false, false);
>>>     // If the arch uses custom Jump Table directives, don't calc
>>> relative to
>>>     // JT
>>>     if (!HadJTEntryDirective)
>>> @@ -352,7 +357,7 @@
>>>         << getFunctionNumber() << '_' << uid;
>>>   }
>>> } else {
>>> -    printBasicBlockLabel(MBB, false, false);
>>> +    printBasicBlockLabel(MBB, false, false, false);
>>> }
>>> }
>>>
>>> @@ -679,8 +684,7 @@
>>> //     Align = std::max(Align, ForcedAlignBits);
>>> //
>>> void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue
>>> *GV,
>>> -                               unsigned ForcedAlignBits, bool
>>> UseFillExpr,
>>> -                               unsigned FillValue) const {
>>> +                               unsigned ForcedAlignBits) const {
>>> if (GV && GV->getAlignment())
>>>   NumBits = Log2_32(GV->getAlignment());
>>> NumBits = std::max(NumBits, ForcedAlignBits);
>>> @@ -688,6 +692,9 @@
>>> if (NumBits == 0) return;   // No need to emit alignment.
>>> if (TAI->getAlignmentIsInBytes()) NumBits = 1 << NumBits;
>>> O << TAI->getAlignDirective() << NumBits;
>>> +
>>> +  unsigned FillValue = TAI->getTextAlignFillValue();
>>> +  bool UseFillExpr = IsInTextSection && FillValue;
>>> if (UseFillExpr) O << ",0x" << std::hex << FillValue << std::dec;
>>> O << "\n";
>>> }
>>> @@ -1252,7 +1259,7 @@
>>>
>>>         if (Modifier[0]=='l')  // labels are target independent
>>>           printBasicBlockLabel(MI->getOperand(OpNo).getMBB(),
>>> -                                 false, false);
>>> +                                 false, false, false);
>>>         else {
>>>           AsmPrinter *AP = const_cast<AsmPrinter*>(this);
>>>           if ((OpFlags & 7) == 4 /*ADDR MODE*/) {
>>> @@ -1318,8 +1325,15 @@
>>> /// printBasicBlockLabel - This method prints the label for the
>>> specified
>>> /// MachineBasicBlock
>>> void AsmPrinter::printBasicBlockLabel(const MachineBasicBlock *MBB,
>>> +                                      bool printAlign,
>>>                                     bool printColon,
>>>                                     bool printComment) const {
>>> +  if (printAlign) {
>>> +    unsigned Align = MBB->getAlignment();
>>> +    if (Align)
>>> +      EmitAlignment(Log2_32(Align));
>>> +  }
>>> +
>>> O << TAI->getPrivateGlobalPrefix() << "BB" << getFunctionNumber()
>>> << "_"
>>>   << MBB->getNumber();
>>> if (printColon)
>>> @@ -1338,7 +1352,7 @@
>>>
>>> O << TAI->getSetDirective() << ' ' << TAI->getPrivateGlobalPrefix()
>>>   << getFunctionNumber() << '_' << uid << "_set_" << MBB-
>>>> getNumber() << ',';
>>> -  printBasicBlockLabel(MBB, false, false);
>>> +  printBasicBlockLabel(MBB, false, false, false);
>>> O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" <<
>>> getFunctionNumber()
>>>   << '_' << uid << '\n';
>>> }
>>> @@ -1351,7 +1365,7 @@
>>> O << TAI->getSetDirective() << ' ' << TAI->getPrivateGlobalPrefix()
>>>   << getFunctionNumber() << '_' << uid << '_' << uid2
>>>   << "_set_" << MBB->getNumber() << ',';
>>> -  printBasicBlockLabel(MBB, false, false);
>>> +  printBasicBlockLabel(MBB, false, false, false);
>>> O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" <<
>>> getFunctionNumber()
>>>   << '_' << uid << '_' << uid2 << '\n';
>>> }
>>>
>>> Modified: llvm/trunk/lib/CodeGen/BranchFolding.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/BranchFolding.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/CodeGen/BranchFolding.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/BranchFolding.cpp Wed Feb 27 18:43:03  
>>> 2008
>>> @@ -44,7 +44,7 @@
>>>           cl::desc("Max number of predecessors to consider tail
>>> merging"),
>>>           cl::init(100), cl::Hidden);
>>>
>>> -  struct BranchFolder : public MachineFunctionPass {
>>> +  struct VISIBILITY_HIDDEN BranchFolder : public
>>> MachineFunctionPass {
>>>   static char ID;
>>>   explicit BranchFolder(bool defaultEnableTailMerge) :
>>>       MachineFunctionPass((intptr_t)&ID) {
>>>
>>> Modified: llvm/trunk/lib/CodeGen/IfConversion.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/IfConversion.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/CodeGen/IfConversion.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/IfConversion.cpp Wed Feb 27 18:43:03 2008
>>> @@ -56,7 +56,7 @@
>>> STATISTIC(NumDupBBs,       "Number of duplicated blocks");
>>>
>>> namespace {
>>> -  class IfConverter : public MachineFunctionPass {
>>> +  class VISIBILITY_HIDDEN IfConverter : public  
>>> MachineFunctionPass {
>>>   enum IfcvtKind {
>>>     ICNotClassfied,  // BB data valid, but not classified.
>>>     ICSimpleFalse,   // Same as ICSimple, but on the false path.
>>>
>>> Added: llvm/trunk/lib/CodeGen/LoopAligner.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LoopAligner.cpp?rev=47703&view=auto
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/CodeGen/LoopAligner.cpp (added)
>>> +++ llvm/trunk/lib/CodeGen/LoopAligner.cpp Wed Feb 27 18:43:03 2008
>>> @@ -0,0 +1,65 @@
>>> +//===-- LoopAligner.cpp - Loop aligner pass.
>>> ------------------------------===//
>>> +//
>>> +//                     The LLVM Compiler Infrastructure
>>> +//
>>> +// This file is distributed under the University of Illinois Open
>>> Source
>>> +// License. See LICENSE.TXT for details.
>>> +//
>>> +//
>>> =
>>> =
>>> =
>>> ----------------------------------------------------------------------=
>>> ==//
>>> +//
>>> +// This file implements the pass that align loop headers to target
>>> specific
>>> +// alignment boundary.
>>> +//
>>> +//
>>> =
>>> =
>>> =
>>> ----------------------------------------------------------------------=
>>> ==//
>>> +
>>> +#define DEBUG_TYPE "loopalign"
>>> +#include "llvm/CodeGen/MachineLoopInfo.h"
>>> +#include "llvm/CodeGen/MachineFunctionPass.h"
>>> +#include "llvm/CodeGen/Passes.h"
>>> +#include "llvm/Target/TargetLowering.h"
>>> +#include "llvm/Target/TargetMachine.h"
>>> +#include "llvm/Support/Compiler.h"
>>> +#include "llvm/Support/Debug.h"
>>> +using namespace llvm;
>>> +
>>> +namespace {
>>> +  class LoopAligner : public MachineFunctionPass {
>>> +    const TargetLowering *TLI;
>>> +
>>> +  public:
>>> +    static char ID;
>>> +    LoopAligner() : MachineFunctionPass((intptr_t)&ID) {}
>>> +
>>> +    virtual bool runOnMachineFunction(MachineFunction &MF);
>>> +    virtual const char *getPassName() const { return "Loop
>>> aligner"; }
>>> +
>>> +    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
>>> +      AU.addRequired<MachineLoopInfo>();
>>> +      AU.addPreserved<MachineLoopInfo>();
>>> +      MachineFunctionPass::getAnalysisUsage(AU);
>>> +    }
>>> +  };
>>> +
>>> +  char LoopAligner::ID = 0;
>>> +} // end anonymous namespace
>>> +
>>> +FunctionPass *llvm::createLoopAlignerPass() { return new
>>> LoopAligner(); }
>>> +
>>> +bool LoopAligner::runOnMachineFunction(MachineFunction &MF) {
>>> +  const MachineLoopInfo *MLI = &getAnalysis<MachineLoopInfo>();
>>> +
>>> +  if (MLI->begin() == MLI->end())
>>> +    return false;  // No loops.
>>> +
>>> +  unsigned Align = MF.getTarget().getTargetLowering()-
>>>> getPrefLoopAlignment();
>>> +  if (!Align)
>>> +    return false;  // Don't care about loop alignment.
>>> +
>>> +  for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I !=
>>> E; ++I) {
>>> +    MachineBasicBlock *MBB = I;
>>> +    if (MLI->isLoopHeader(MBB))
>>> +      MBB->setAlignment(Align);
>>> +  }
>>> +
>>> +  return true;
>>> +}
>>>
>>> Modified: llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp Wed Feb 27 18:43:03
>>> 2008
>>> @@ -166,6 +166,7 @@
>>> if (LBB) OS << LBB->getName() << ": ";
>>> OS << (const void*)this
>>>    << ", LLVM BB @" << (const void*) LBB << ", ID#" << getNumber();
>>> +  if (Alignment) OS << ", Alignment " << Alignment;
>>> if (isLandingPad()) OS << ", EH LANDING PAD";
>>> OS << ":\n";
>>>
>>>
>>> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp  
>>> (original)
>>> +++ llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Wed Feb
>>> 27 18:43:03 2008
>>> @@ -206,6 +206,8 @@
>>> JumpBufSize = 0;
>>> JumpBufAlignment = 0;
>>> IfCvtBlockSizeLimit = 2;
>>> +  IfCvtDupBlockSizeLimit = 0;
>>> +  PrefLoopAlignment = 0;
>>>
>>> InitLibcallNames(LibcallRoutineNames);
>>> InitCmpLibcallCCs(CmpLibcallCCs);
>>>
>>> Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Wed Feb 27 18:43:03
>>> 2008
>>> @@ -248,7 +248,7 @@
>>>      I != E; ++I) {
>>>   // Print a label for the basic block.
>>>   if (I != MF.begin()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>   for (MachineBasicBlock::const_iterator II = I->begin(), E = I-
>>>> end();
>>> @@ -710,13 +710,13 @@
>>>       << '_' << JTI << '_' << MO2.getImm()
>>>       << "_set_" << MBB->getNumber();
>>>   else if (TM.getRelocationModel() == Reloc::PIC_) {
>>> -      printBasicBlockLabel(MBB, false, false);
>>> +      printBasicBlockLabel(MBB, false, false, false);
>>>     // If the arch uses custom Jump Table directives, don't calc
>>> relative to JT
>>>     if (!TAI->getJumpTableDirective())
>>>       O << '-' << TAI->getPrivateGlobalPrefix() << "JTI"
>>>         << getFunctionNumber() << '_' << JTI << '_' << MO2.getImm();
>>>   } else
>>> -      printBasicBlockLabel(MBB, false, false);
>>> +      printBasicBlockLabel(MBB, false, false, false);
>>>   if (i != e-1)
>>>     O << '\n';
>>> }
>>>
>>> Modified: llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -171,7 +171,7 @@
>>> for (MachineFunction::const_iterator I = MF.begin(), E = MF.end();
>>>      I != E; ++I) {
>>>   if (I != MF.begin()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>   for (MachineBasicBlock::const_iterator II = I->begin(), E = I-
>>>> end();
>>>
>>> Modified: llvm/trunk/lib/Target/CellSPU/SPUAsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUAsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/CellSPU/SPUAsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/Target/CellSPU/SPUAsmPrinter.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -460,7 +460,7 @@
>>>      I != E; ++I) {
>>>   // Print a label for the basic block.
>>>   if (I != MF.begin()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>   for (MachineBasicBlock::const_iterator II = I->begin(), E = I-
>>>> end();
>>>
>>> Modified: llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -149,7 +149,7 @@
>>>      I != E; ++I) {
>>>   // Print a label for the basic block if there are any
>>> predecessors.
>>>   if (!I->pred_empty()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>   for (MachineBasicBlock::const_iterator II = I->begin(), E = I-
>>>> end();
>>>
>>> Modified: llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -297,7 +297,7 @@
>>>
>>>   // Print a label for the basic block.
>>>   if (I != MF.begin()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>
>>>
>>> Modified: llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -604,7 +604,7 @@
>>>      I != E; ++I) {
>>>   // Print a label for the basic block.
>>>   if (I != MF.begin()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>   for (MachineBasicBlock::const_iterator II = I->begin(), E = I-
>>>> end();
>>> @@ -838,7 +838,7 @@
>>>      I != E; ++I) {
>>>   // Print a label for the basic block.
>>>   if (I != MF.begin()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>   for (MachineBasicBlock::const_iterator II = I->begin(), IE = I-
>>>> end();
>>>
>>> Modified: llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -116,7 +116,7 @@
>>>      I != E; ++I) {
>>>   // Print a label for the basic block.
>>>   if (I != MF.begin()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>   for (MachineBasicBlock::const_iterator II = I->begin(), E = I-
>>>> end();
>>>
>>> Modified: llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -101,36 +101,25 @@
>>> switch (F->getLinkage()) {
>>> default: assert(0 && "Unknown linkage type!");
>>> case Function::InternalLinkage:  // Symbols default to internal.
>>> -    if (Subtarget->isTargetDarwin())
>>> -      // FIXME: This should be parameterized somewhere.
>>> -      EmitAlignment(4, F, 0, true, 0x90);
>>> -    else
>>> -      EmitAlignment(4, F);
>>> +    EmitAlignment(4, F);
>>>   break;
>>> case Function::DLLExportLinkage:
>>>   DLLExportedFns.insert(Mang->makeNameProper(F->getName(), ""));
>>>   //FALLS THROUGH
>>> case Function::ExternalLinkage:
>>> -    if (Subtarget->isTargetDarwin())
>>> -      // FIXME: This should be parameterized somewhere.
>>> -      EmitAlignment(4, F, 0, true, 0x90);
>>> -    else
>>> -      EmitAlignment(4, F);
>>> +    EmitAlignment(4, F);
>>>   O << "\t.globl\t" << CurrentFnName << "\n";
>>>   break;
>>> case Function::LinkOnceLinkage:
>>> case Function::WeakLinkage:
>>> +    EmitAlignment(4, F);
>>>   if (Subtarget->isTargetDarwin()) {
>>> -      // FIXME: This should be parameterized somewhere.
>>> -      EmitAlignment(4, F, 0, true, 0x90);
>>>     O << "\t.globl\t" << CurrentFnName << "\n";
>>>     O << TAI->getWeakDefDirective() << CurrentFnName << "\n";
>>>   } else if (Subtarget->isTargetCygMing()) {
>>> -      EmitAlignment(4, F);
>>>     O << "\t.globl\t" << CurrentFnName << "\n";
>>>     O << "\t.linkonce discard\n";
>>>   } else {
>>> -      EmitAlignment(4, F);
>>>     O << "\t.weak\t" << CurrentFnName << "\n";
>>>   }
>>>   break;
>>> @@ -180,7 +169,7 @@
>>>      I != E; ++I) {
>>>   // Print a label for the basic block.
>>>   if (!I->pred_empty()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>   for (MachineBasicBlock::const_iterator II = I->begin(), IE = I-
>>>> end();
>>> @@ -515,7 +504,7 @@
>>>
>>> O << TAI->getSetDirective() << ' ' << TAI->getPrivateGlobalPrefix()
>>>   << getFunctionNumber() << '_' << uid << "_set_" << MBB-
>>>> getNumber() << ',';
>>> -  printBasicBlockLabel(MBB, false, false);
>>> +  printBasicBlockLabel(MBB, false, false, false);
>>> if (Subtarget->isPICStyleRIPRel())
>>>   O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" <<
>>> getFunctionNumber()
>>>     << '_' << uid << '\n';
>>> @@ -543,12 +532,12 @@
>>>     O << TAI->getPrivateGlobalPrefix() << getFunctionNumber()
>>>       << '_' << uid << "_set_" << MBB->getNumber();
>>>   } else if (Subtarget->isPICStyleGOT()) {
>>> -      printBasicBlockLabel(MBB, false, false);
>>> +      printBasicBlockLabel(MBB, false, false, false);
>>>     O << "@GOTOFF";
>>>   } else
>>>     assert(0 && "Don't know how to print MBB label for this PIC
>>> mode");
>>> } else
>>> -    printBasicBlockLabel(MBB, false, false);
>>> +    printBasicBlockLabel(MBB, false, false, false);
>>> }
>>>
>>> bool X86ATTAsmPrinter::printAsmMRegister(const MachineOperand &MO,
>>>
>>> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
>>> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -714,6 +714,7 @@
>>> maxStoresPerMemcpy = 16; // For %llvm.memcpy -> sequence of stores
>>> maxStoresPerMemmove = 16; // For %llvm.memmove -> sequence of stores
>>> allowUnalignedMemoryAccesses = true; // x86 supports it!
>>> +  setPrefLoopAlignment(16);
>>> }
>>>
>>> /// getMaxByValAlign - Helper for getByValTypeAlignment to determine
>>>
>>> Modified: llvm/trunk/lib/Target/X86/X86IntelAsmPrinter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86IntelAsmPrinter.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/X86/X86IntelAsmPrinter.cpp (original)
>>> +++ llvm/trunk/lib/Target/X86/X86IntelAsmPrinter.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -78,7 +78,7 @@
>>>      I != E; ++I) {
>>>   // Print a label for the basic block if there are any
>>> predecessors.
>>>   if (!I->pred_empty()) {
>>> -      printBasicBlockLabel(I, true);
>>> +      printBasicBlockLabel(I, true, true);
>>>     O << '\n';
>>>   }
>>>   for (MachineBasicBlock::const_iterator II = I->begin(), E = I-
>>>> end();
>>> @@ -242,7 +242,7 @@
>>>
>>> O << TAI->getSetDirective() << ' ' << TAI->getPrivateGlobalPrefix()
>>>   << getFunctionNumber() << '_' << uid << "_set_" << MBB-
>>>> getNumber() << ',';
>>> -  printBasicBlockLabel(MBB, false, false);
>>> +  printBasicBlockLabel(MBB, false, false, false);
>>> O << '-' << "\"L" << getFunctionNumber() << "$pb\"'\n";
>>> }
>>>
>>>
>>> Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original)
>>> +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -47,6 +47,7 @@
>>> switch (Subtarget->TargetType) {
>>> case X86Subtarget::isDarwin:
>>>   AlignmentIsInBytes = false;
>>> +    TextAlignFillValue = 0x90;
>>>   GlobalPrefix = "_";
>>>   if (!Subtarget->is64Bit())
>>>     Data64bitsDirective = 0;       // we can't emit a 64-bit unit
>>>
>>> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)
>>> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Wed Feb 27
>>> 18:43:03 2008
>>> @@ -164,6 +164,13 @@
>>> return true;  // -print-machineinstr should print after this.
>>> }
>>>
>>> +bool X86TargetMachine::addPreEmitPass(FunctionPassManager &PM, bool
>>> Fast) {
>>> +  if (Fast) return false;
>>> +
>>> +  PM.add(createLoopAlignerPass());
>>> +  return true;
>>> +}
>>> +
>>> bool X86TargetMachine::addAssemblyEmitter(FunctionPassManager &PM,
>>> bool Fast,
>>>                                         std::ostream &Out) {
>>> PM.add(createX86CodePrinterPass(Out, *this));
>>>
>>> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.h?rev=47703&r1=47702&r2=47703&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/X86/X86TargetMachine.h (original)
>>> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.h Wed Feb 27 18:43:03
>>> 2008
>>> @@ -63,6 +63,7 @@
>>> // Set up the pass pipeline.
>>> virtual bool addInstSelector(FunctionPassManager &PM, bool Fast);
>>> virtual bool addPostRegAlloc(FunctionPassManager &PM, bool Fast);
>>> +  virtual bool addPreEmitPass(FunctionPassManager &PM, bool Fast);
>>> virtual bool addAssemblyEmitter(FunctionPassManager &PM, bool Fast,
>>>                                 std::ostream &Out);
>>> virtual bool addCodeEmitter(FunctionPassManager &PM, bool Fast,
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> _______________________________________________
> 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