[llvm-branch-commits] [llvm-branch] r117425 [1/9] - in /llvm/branches/wendling/eh: ./ autoconf/ autoconf/m4/ bindings/ada/ bindings/ocaml/llvm/ bindings/ocaml/transforms/scalar/ cmake/ cmake/modules/ docs/ docs/CommandGuide/ docs/tutorial/ examples/ examples/BrainF/ examples/ExceptionDemo/ examples/Fibonacci/ examples/Kaleidoscope/Chapter7/ examples/ModuleMaker/ include/llvm-c/ include/llvm-c/Transforms/ include/llvm/ include/llvm/ADT/ include/llvm/Analysis/ include/llvm/Assembly/ include/llvm/Bitcode/ include/llvm/CodeGen/ i...

Bill Wendling isanbard at gmail.com
Tue Oct 26 17:48:11 PDT 2010


Author: void
Date: Tue Oct 26 19:48:03 2010
New Revision: 117425

URL: http://llvm.org/viewvc/llvm-project?rev=117425&view=rev
Log:
Update to ToT.

Added:
    llvm/branches/wendling/eh/cmake/modules/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/cmake/modules/CMakeLists.txt
    llvm/branches/wendling/eh/cmake/modules/ChooseMSVCCRT.cmake
      - copied unchanged from r117418, llvm/trunk/cmake/modules/ChooseMSVCCRT.cmake
    llvm/branches/wendling/eh/cmake/modules/LLVM.cmake
      - copied unchanged from r117418, llvm/trunk/cmake/modules/LLVM.cmake
    llvm/branches/wendling/eh/cmake/modules/LLVMConfig.cmake
      - copied unchanged from r117418, llvm/trunk/cmake/modules/LLVMConfig.cmake
    llvm/branches/wendling/eh/cmake/modules/LLVMLibDeps.cmake
      - copied unchanged from r117418, llvm/trunk/cmake/modules/LLVMLibDeps.cmake
    llvm/branches/wendling/eh/cmake/modules/VersionFromVCS.cmake
      - copied unchanged from r117418, llvm/trunk/cmake/modules/VersionFromVCS.cmake
    llvm/branches/wendling/eh/docs/CommandGuide/llvm-diff.pod
      - copied unchanged from r117418, llvm/trunk/docs/CommandGuide/llvm-diff.pod
    llvm/branches/wendling/eh/include/llvm-c/Initialization.h
      - copied unchanged from r117418, llvm/trunk/include/llvm-c/Initialization.h
    llvm/branches/wendling/eh/include/llvm/Analysis/RegionPass.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/Analysis/RegionPass.h
    llvm/branches/wendling/eh/include/llvm/Assembly/AssemblyAnnotationWriter.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/Assembly/AssemblyAnnotationWriter.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/PBQP/
      - copied from r117418, llvm/trunk/include/llvm/CodeGen/PBQP/
    llvm/branches/wendling/eh/include/llvm/CodeGen/PBQP/Graph.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/CodeGen/PBQP/Graph.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/PBQP/HeuristicBase.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/CodeGen/PBQP/HeuristicBase.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/PBQP/HeuristicSolver.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/CodeGen/PBQP/HeuristicSolver.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/PBQP/Heuristics/
      - copied from r117418, llvm/trunk/include/llvm/CodeGen/PBQP/Heuristics/
    llvm/branches/wendling/eh/include/llvm/CodeGen/PBQP/Heuristics/Briggs.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/CodeGen/PBQP/Heuristics/Briggs.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/PBQP/Math.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/CodeGen/PBQP/Math.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/PBQP/Solution.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/CodeGen/PBQP/Solution.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/RegAllocPBQP.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/AutoGenerated.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/CompilerDriver/AutoGenerated.h
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/Main.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/CompilerDriver/Main.h
    llvm/branches/wendling/eh/include/llvm/Config/llvm-config.h.cmake
      - copied unchanged from r117418, llvm/trunk/include/llvm/Config/llvm-config.h.cmake
    llvm/branches/wendling/eh/include/llvm/Config/llvm-config.h.in
      - copied unchanged from r117418, llvm/trunk/include/llvm/Config/llvm-config.h.in
    llvm/branches/wendling/eh/include/llvm/InitializePasses.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/InitializePasses.h
    llvm/branches/wendling/eh/include/llvm/MC/ELFObjectWriter.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/MC/ELFObjectWriter.h
    llvm/branches/wendling/eh/include/llvm/MC/MCELFSymbolFlags.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/MC/MCELFSymbolFlags.h
    llvm/branches/wendling/eh/include/llvm/MC/MCObjectFormat.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/MC/MCObjectFormat.h
    llvm/branches/wendling/eh/include/llvm/Support/Endian.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/Support/Endian.h
    llvm/branches/wendling/eh/include/llvm/Support/ToolOutputFile.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/Support/ToolOutputFile.h
    llvm/branches/wendling/eh/include/llvm/System/FEnv.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/System/FEnv.h
    llvm/branches/wendling/eh/include/llvm/System/SwapByteOrder.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/System/SwapByteOrder.h
    llvm/branches/wendling/eh/include/llvm/Transforms/Utils/ValueMapper.h
      - copied unchanged from r117418, llvm/trunk/include/llvm/Transforms/Utils/ValueMapper.h
    llvm/branches/wendling/eh/lib/Analysis/IPA/IPA.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Analysis/IPA/IPA.cpp
    llvm/branches/wendling/eh/lib/Analysis/MemDepPrinter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Analysis/MemDepPrinter.cpp
    llvm/branches/wendling/eh/lib/Analysis/NoAliasAnalysis.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp
    llvm/branches/wendling/eh/lib/Analysis/RegionPass.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Analysis/RegionPass.cpp
    llvm/branches/wendling/eh/lib/Analysis/TypeBasedAliasAnalysis.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp
    llvm/branches/wendling/eh/lib/CodeGen/CodeGen.cpp
      - copied unchanged from r117418, llvm/trunk/lib/CodeGen/CodeGen.cpp
    llvm/branches/wendling/eh/lib/CodeGen/LiveIntervalUnion.cpp
      - copied unchanged from r117418, llvm/trunk/lib/CodeGen/LiveIntervalUnion.cpp
    llvm/branches/wendling/eh/lib/CodeGen/LiveIntervalUnion.h
      - copied unchanged from r117418, llvm/trunk/lib/CodeGen/LiveIntervalUnion.h
    llvm/branches/wendling/eh/lib/CodeGen/LiveRangeEdit.cpp
      - copied unchanged from r117418, llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp
    llvm/branches/wendling/eh/lib/CodeGen/LiveRangeEdit.h
      - copied unchanged from r117418, llvm/trunk/lib/CodeGen/LiveRangeEdit.h
    llvm/branches/wendling/eh/lib/CodeGen/LocalStackSlotAllocation.cpp
      - copied unchanged from r117418, llvm/trunk/lib/CodeGen/LocalStackSlotAllocation.cpp
    llvm/branches/wendling/eh/lib/CodeGen/PeepholeOptimizer.cpp
      - copied unchanged from r117418, llvm/trunk/lib/CodeGen/PeepholeOptimizer.cpp
    llvm/branches/wendling/eh/lib/CodeGen/RegAllocBase.h
      - copied unchanged from r117418, llvm/trunk/lib/CodeGen/RegAllocBase.h
    llvm/branches/wendling/eh/lib/CodeGen/RegAllocBasic.cpp
      - copied unchanged from r117418, llvm/trunk/lib/CodeGen/RegAllocBasic.cpp
    llvm/branches/wendling/eh/lib/MC/ELFObjectWriter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/MC/ELFObjectWriter.cpp
    llvm/branches/wendling/eh/lib/MC/MCELFStreamer.cpp
      - copied unchanged from r117418, llvm/trunk/lib/MC/MCELFStreamer.cpp
    llvm/branches/wendling/eh/lib/MC/MCObjectFormat.cpp
      - copied unchanged from r117418, llvm/trunk/lib/MC/MCObjectFormat.cpp
    llvm/branches/wendling/eh/lib/MC/MCParser/COFFAsmParser.cpp
      - copied unchanged from r117418, llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp
    llvm/branches/wendling/eh/lib/Support/ToolOutputFile.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Support/ToolOutputFile.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMAsmBackend.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/ARMAsmBackend.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMBaseInfo.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/ARMBaseInfo.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMCallingConv.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/ARMCallingConv.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMELFWriterInfo.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/ARMELFWriterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMELFWriterInfo.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/ARMELFWriterInfo.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMMCCodeEmitter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/Disassembler/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/Disassembler/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/ARM/InstPrinter/   (props changed)
      - copied from r117418, llvm/trunk/lib/Target/ARM/InstPrinter/
    llvm/branches/wendling/eh/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/InstPrinter/ARMInstPrinter.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h
    llvm/branches/wendling/eh/lib/Target/ARM/InstPrinter/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/InstPrinter/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/ARM/InstPrinter/Makefile
      - copied unchanged from r117418, llvm/trunk/lib/Target/ARM/InstPrinter/Makefile
    llvm/branches/wendling/eh/lib/Target/MBlaze/AsmParser/
      - copied from r117418, llvm/trunk/lib/Target/MBlaze/AsmParser/
    llvm/branches/wendling/eh/lib/Target/MBlaze/AsmParser/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/AsmParser/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/MBlaze/AsmParser/MBlazeAsmLexer.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/AsmParser/MBlazeAsmLexer.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/AsmParser/MBlazeAsmParser.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/AsmParser/MBlazeAsmParser.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/AsmParser/Makefile
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/AsmParser/Makefile
    llvm/branches/wendling/eh/lib/Target/MBlaze/InstPrinter/
      - copied from r117418, llvm/trunk/lib/Target/MBlaze/InstPrinter/
    llvm/branches/wendling/eh/lib/Target/MBlaze/InstPrinter/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/InstPrinter/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/MBlaze/InstPrinter/MBlazeInstPrinter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/InstPrinter/MBlazeInstPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/InstPrinter/MBlazeInstPrinter.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/InstPrinter/MBlazeInstPrinter.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/InstPrinter/Makefile
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/InstPrinter/Makefile
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeAsmBackend.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/MBlazeAsmBackend.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeAsmPrinter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/MBlazeAsmPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeELFWriterInfo.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/MBlazeELFWriterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeELFWriterInfo.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/MBlazeELFWriterInfo.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeFixupKinds.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/MBlazeFixupKinds.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeMCInstLower.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/MBlazeMCInstLower.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeMCInstLower.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/MBlazeMCInstLower.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeRelocations.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/MBlazeRelocations.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/TODO
      - copied unchanged from r117418, llvm/trunk/lib/Target/MBlaze/TODO
    llvm/branches/wendling/eh/lib/Target/MSP430/InstPrinter/
      - copied from r117418, llvm/trunk/lib/Target/MSP430/InstPrinter/
    llvm/branches/wendling/eh/lib/Target/MSP430/InstPrinter/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/lib/Target/MSP430/InstPrinter/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/MSP430/InstPrinter/MSP430InstPrinter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MSP430/InstPrinter/MSP430InstPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/MSP430/InstPrinter/MSP430InstPrinter.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/MSP430/InstPrinter/MSP430InstPrinter.h
    llvm/branches/wendling/eh/lib/Target/MSP430/InstPrinter/Makefile
      - copied unchanged from r117418, llvm/trunk/lib/Target/MSP430/InstPrinter/Makefile
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430AsmPrinter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MSP430/MSP430AsmPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430MCInstLower.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/MSP430/MSP430MCInstLower.cpp
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430MCInstLower.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/MSP430/MSP430MCInstLower.h
    llvm/branches/wendling/eh/lib/Target/PTX/   (props changed)
      - copied from r117418, llvm/trunk/lib/Target/PTX/
    llvm/branches/wendling/eh/lib/Target/PTX/AsmPrinter/   (props changed)
      - copied from r117418, llvm/trunk/lib/Target/PTX/AsmPrinter/
    llvm/branches/wendling/eh/lib/Target/PTX/AsmPrinter/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/AsmPrinter/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/PTX/AsmPrinter/Makefile
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/AsmPrinter/Makefile
    llvm/branches/wendling/eh/lib/Target/PTX/AsmPrinter/PTXAsmPrinter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/AsmPrinter/PTXAsmPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/PTX/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/PTX/Makefile
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/Makefile
    llvm/branches/wendling/eh/lib/Target/PTX/PTX.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTX.h
    llvm/branches/wendling/eh/lib/Target/PTX/PTX.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTX.td
    llvm/branches/wendling/eh/lib/Target/PTX/PTXISelDAGToDAG.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/PTX/PTXISelLowering.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/PTX/PTXISelLowering.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXISelLowering.h
    llvm/branches/wendling/eh/lib/Target/PTX/PTXInstrFormats.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXInstrFormats.td
    llvm/branches/wendling/eh/lib/Target/PTX/PTXInstrInfo.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXInstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/PTX/PTXInstrInfo.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXInstrInfo.h
    llvm/branches/wendling/eh/lib/Target/PTX/PTXInstrInfo.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXInstrInfo.td
    llvm/branches/wendling/eh/lib/Target/PTX/PTXMCAsmInfo.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXMCAsmInfo.cpp
    llvm/branches/wendling/eh/lib/Target/PTX/PTXMCAsmInfo.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXMCAsmInfo.h
    llvm/branches/wendling/eh/lib/Target/PTX/PTXRegisterInfo.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/PTX/PTXRegisterInfo.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXRegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/PTX/PTXRegisterInfo.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXRegisterInfo.td
    llvm/branches/wendling/eh/lib/Target/PTX/PTXSubtarget.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXSubtarget.cpp
    llvm/branches/wendling/eh/lib/Target/PTX/PTXSubtarget.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXSubtarget.h
    llvm/branches/wendling/eh/lib/Target/PTX/PTXTargetMachine.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXTargetMachine.cpp
    llvm/branches/wendling/eh/lib/Target/PTX/PTXTargetMachine.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/PTXTargetMachine.h
    llvm/branches/wendling/eh/lib/Target/PTX/TargetInfo/   (props changed)
      - copied from r117418, llvm/trunk/lib/Target/PTX/TargetInfo/
    llvm/branches/wendling/eh/lib/Target/PTX/TargetInfo/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/TargetInfo/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/PTX/TargetInfo/Makefile
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/TargetInfo/Makefile
    llvm/branches/wendling/eh/lib/Target/PTX/TargetInfo/PTXTargetInfo.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/PTX/TargetInfo/PTXTargetInfo.cpp
    llvm/branches/wendling/eh/lib/Target/X86/InstPrinter/   (props changed)
      - copied from r117418, llvm/trunk/lib/Target/X86/InstPrinter/
    llvm/branches/wendling/eh/lib/Target/X86/InstPrinter/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/InstPrinter/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/X86/InstPrinter/Makefile
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/InstPrinter/Makefile
    llvm/branches/wendling/eh/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
    llvm/branches/wendling/eh/lib/Target/X86/InstPrinter/X86InstComments.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/InstPrinter/X86InstComments.cpp
    llvm/branches/wendling/eh/lib/Target/X86/InstPrinter/X86InstComments.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/InstPrinter/X86InstComments.h
    llvm/branches/wendling/eh/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
    llvm/branches/wendling/eh/lib/Target/X86/X86Instr3DNow.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86Instr3DNow.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrArithmetic.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86InstrArithmetic.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrCMovSetCC.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86InstrCMovSetCC.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrCompiler.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86InstrCompiler.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrControl.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86InstrControl.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrExtension.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86InstrExtension.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrShiftRotate.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86InstrShiftRotate.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrSystem.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86InstrSystem.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrVMX.td
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86InstrVMX.td
    llvm/branches/wendling/eh/lib/Target/X86/X86ShuffleDecode.h
      - copied unchanged from r117418, llvm/trunk/lib/Target/X86/X86ShuffleDecode.h
    llvm/branches/wendling/eh/lib/Transforms/Instrumentation/Instrumentation.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/LowerAtomic.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Transforms/Scalar/LowerAtomic.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/Utils.cpp
      - copied unchanged from r117418, llvm/trunk/lib/Transforms/Utils/Utils.cpp
    llvm/branches/wendling/eh/runtime/libprofile/libprofile.exports
      - copied unchanged from r117418, llvm/trunk/runtime/libprofile/libprofile.exports
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2010-09-15-GEP-SignedArithmetic.ll
      - copied unchanged from r117418, llvm/trunk/test/Analysis/BasicAA/2010-09-15-GEP-SignedArithmetic.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/getmodrefinfo-cs-cs.ll
      - copied unchanged from r117418, llvm/trunk/test/Analysis/BasicAA/getmodrefinfo-cs-cs.ll
    llvm/branches/wendling/eh/test/Analysis/RegionInfo/20100809_bb_not_in_domtree.ll
      - copied unchanged from r117418, llvm/trunk/test/Analysis/RegionInfo/20100809_bb_not_in_domtree.ll
    llvm/branches/wendling/eh/test/Analysis/TypeBasedAliasAnalysis/
      - copied from r117418, llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/
    llvm/branches/wendling/eh/test/Analysis/TypeBasedAliasAnalysis/aliastest.ll
      - copied unchanged from r117418, llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/aliastest.ll
    llvm/branches/wendling/eh/test/Analysis/TypeBasedAliasAnalysis/dg.exp
      - copied unchanged from r117418, llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/dg.exp
    llvm/branches/wendling/eh/test/Analysis/TypeBasedAliasAnalysis/licm.ll
      - copied unchanged from r117418, llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/licm.ll
    llvm/branches/wendling/eh/test/Assembler/AutoUpgradeMMXIntrinsics.ll
      - copied unchanged from r117418, llvm/trunk/test/Assembler/AutoUpgradeMMXIntrinsics.ll
    llvm/branches/wendling/eh/test/Assembler/comment.ll
      - copied unchanged from r117418, llvm/trunk/test/Assembler/comment.ll
    llvm/branches/wendling/eh/test/Assembler/x86mmx.ll
      - copied unchanged from r117418, llvm/trunk/test/Assembler/x86mmx.ll
    llvm/branches/wendling/eh/test/Bitcode/AutoUpgradeGlobals.ll
      - copied unchanged from r117418, llvm/trunk/test/Bitcode/AutoUpgradeGlobals.ll
    llvm/branches/wendling/eh/test/Bitcode/AutoUpgradeGlobals.ll.bc
      - copied unchanged from r117418, llvm/trunk/test/Bitcode/AutoUpgradeGlobals.ll.bc
    llvm/branches/wendling/eh/test/Bitcode/neon-intrinsics.ll
      - copied unchanged from r117418, llvm/trunk/test/Bitcode/neon-intrinsics.ll
    llvm/branches/wendling/eh/test/Bitcode/neon-intrinsics.ll.bc
      - copied unchanged from r117418, llvm/trunk/test/Bitcode/neon-intrinsics.ll.bc
    llvm/branches/wendling/eh/test/BugPoint/metadata.ll
      - copied unchanged from r117418, llvm/trunk/test/BugPoint/metadata.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-08-04-EHCrash.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/2010-08-04-EHCrash.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-09-17-vmovrrd-combine.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/2010-09-17-vmovrrd-combine.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-09-21-OptCmpBug.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/2010-09-21-OptCmpBug.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-09-29-mc-asm-header-test.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/2010-09-29-mc-asm-header-test.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-10-19-mc-elf-objheader.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/2010-10-19-mc-elf-objheader.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-10-25-ifcvt-ldm.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/2010-10-25-ifcvt-ldm.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/arm-and-tst-peephole.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/arm-and-tst-peephole.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/code-placement.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/code-placement.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/crash.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/crash.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/ifcvt10.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/ARM/ifcvt10.ll
    llvm/branches/wendling/eh/test/CodeGen/Alpha/2010-08-01-mulreduce64.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/Alpha/2010-08-01-mulreduce64.ll
    llvm/branches/wendling/eh/test/CodeGen/CellSPU/arg_ret.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/CellSPU/arg_ret.ll
    llvm/branches/wendling/eh/test/CodeGen/CellSPU/v2f32.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/CellSPU/v2f32.ll
    llvm/branches/wendling/eh/test/CodeGen/CellSPU/v2i32.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/CellSPU/v2i32.ll
    llvm/branches/wendling/eh/test/CodeGen/PTX/   (props changed)
      - copied from r117418, llvm/trunk/test/CodeGen/PTX/
    llvm/branches/wendling/eh/test/CodeGen/PTX/dg.exp
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/PTX/dg.exp
    llvm/branches/wendling/eh/test/CodeGen/PTX/exit.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/PTX/exit.ll
    llvm/branches/wendling/eh/test/CodeGen/PTX/mov.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/PTX/mov.ll
    llvm/branches/wendling/eh/test/CodeGen/PTX/ret.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/PTX/ret.ll
    llvm/branches/wendling/eh/test/CodeGen/PowerPC/2010-10-11-Fast-Varargs.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/PowerPC/2010-10-11-Fast-Varargs.ll
    llvm/branches/wendling/eh/test/CodeGen/PowerPC/varargs.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/PowerPC/varargs.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb/barrier.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/Thumb/barrier.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/2009-08-21-PostRAKill4.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/Thumb2/2009-08-21-PostRAKill4.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/2009-09-01-PostRAProlog.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/Thumb2/2009-09-01-PostRAProlog.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/2010-08-10-VarSizedAllocaBug.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/Thumb2/2010-08-10-VarSizedAllocaBug.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/buildvector-crash.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/Thumb2/buildvector-crash.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/cortex-fp.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/Thumb2/cortex-fp.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/thumb2-barrier.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/Thumb2/thumb2-barrier.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2008-08-06-CmpStride.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2008-08-06-CmpStride.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2009-02-09-ivs-different-sizes.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2009-02-09-ivs-different-sizes.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-01-18-DbgValue.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-01-18-DbgValue.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-02-01-DbgValueCrash.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-02-01-DbgValueCrash.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-05-25-DotDebugLoc.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-05-25-DotDebugLoc.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-05-28-Crash.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-05-28-Crash.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-06-01-DeadArg-DbgInfo.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-06-01-DeadArg-DbgInfo.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-08-04-MaskedSignedCompare.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-08-04-MaskedSignedCompare.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-08-04-MingWCrash.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-08-04-MingWCrash.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-08-10-DbgConstant.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-08-10-DbgConstant.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-09-01-RemoveCopyByCommutingDef.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-09-01-RemoveCopyByCommutingDef.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-09-16-asmcrash.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-09-16-asmcrash.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-09-17-SideEffectsInChain.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-09-17-SideEffectsInChain.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-09-30-CMOV-JumpTable-PHI.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-09-30-CMOV-JumpTable-PHI.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-10-08-cmpxchg8b.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/2010-10-08-cmpxchg8b.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/MachineSink-PHIUse.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/MachineSink-PHIUse.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/add-of-carry.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/add-of-carry.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/alldiv-divdi3.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/alldiv-divdi3.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/andimm8.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/andimm8.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/avx-128.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/avx-128.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/avx-256.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/avx-256.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/avx-intrinsics-x86.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/avx-intrinsics-x86_64.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86_64.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/bit-test-shift.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/bit-test-shift.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/change-compare-stride-trickiness-0.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/change-compare-stride-trickiness-0.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/change-compare-stride-trickiness-1.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/change-compare-stride-trickiness-1.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/change-compare-stride-trickiness-2.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/change-compare-stride-trickiness-2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/cmp.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/cmp.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/fast-isel-avoid-unnecessary-pic-base.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/fast-isel-avoid-unnecessary-pic-base.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/fast-isel-cmp-branch.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/fast-isel-cmp-branch.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/fltused.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/fltused.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/force-align-stack.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/force-align-stack.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/insert-positions.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/insert-positions.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/int-intrinsic.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/int-intrinsic.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/lock-inst-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/lock-inst-encoding.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/lsr-interesting-step.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/lsr-interesting-step.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/lsr-static-addr.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/lsr-static-addr.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-builtins.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/mmx-builtins.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/pr7882.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/pr7882.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/sse1.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/sse1.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/stdcall-notailcall.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/stdcall-notailcall.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/uint64-to-float.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/uint64-to-float.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-37.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/vec_shuffle-37.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/win64_params.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/win64_params.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/win64_vararg.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/win64_vararg.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/win_chkstk.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/X86/win_chkstk.ll
    llvm/branches/wendling/eh/test/CodeGen/thumb2-mul.ll
      - copied unchanged from r117418, llvm/trunk/test/CodeGen/thumb2-mul.ll
    llvm/branches/wendling/eh/test/DebugInfo/2010-08-04-StackVariable.ll
      - copied unchanged from r117418, llvm/trunk/test/DebugInfo/2010-08-04-StackVariable.ll
    llvm/branches/wendling/eh/test/DebugInfo/2010-09-16-EmptyFilename.ll
      - copied unchanged from r117418, llvm/trunk/test/DebugInfo/2010-09-16-EmptyFilename.ll
    llvm/branches/wendling/eh/test/DebugInfo/2010-10-01-crash.ll
      - copied unchanged from r117418, llvm/trunk/test/DebugInfo/2010-10-01-crash.ll
    llvm/branches/wendling/eh/test/FrontendC++/2010-08-31-ByValArg.cpp
      - copied unchanged from r117418, llvm/trunk/test/FrontendC++/2010-08-31-ByValArg.cpp
    llvm/branches/wendling/eh/test/FrontendC/2010-08-12-asm-aggr-arg.c
      - copied unchanged from r117418, llvm/trunk/test/FrontendC/2010-08-12-asm-aggr-arg.c
    llvm/branches/wendling/eh/test/FrontendC/asm-reg-var-local.c
      - copied unchanged from r117418, llvm/trunk/test/FrontendC/asm-reg-var-local.c
    llvm/branches/wendling/eh/test/FrontendC/misaligned-param.c
      - copied unchanged from r117418, llvm/trunk/test/FrontendC/misaligned-param.c
    llvm/branches/wendling/eh/test/FrontendObjC++/2010-08-02-NonPODObjectValue.mm
      - copied unchanged from r117418, llvm/trunk/test/FrontendObjC++/2010-08-02-NonPODObjectValue.mm
    llvm/branches/wendling/eh/test/FrontendObjC++/2010-08-04-Template.mm
      - copied unchanged from r117418, llvm/trunk/test/FrontendObjC++/2010-08-04-Template.mm
    llvm/branches/wendling/eh/test/FrontendObjC++/2010-08-06-X.Y-syntax.mm
      - copied unchanged from r117418, llvm/trunk/test/FrontendObjC++/2010-08-06-X.Y-syntax.mm
    llvm/branches/wendling/eh/test/LLVMC/Alias.td
      - copied unchanged from r117418, llvm/trunk/test/LLVMC/Alias.td
    llvm/branches/wendling/eh/test/LLVMC/C++/just-compile.cpp
      - copied unchanged from r117418, llvm/trunk/test/LLVMC/C++/just-compile.cpp
    llvm/branches/wendling/eh/test/LLVMC/C++/unknown_suffix.unk
      - copied unchanged from r117418, llvm/trunk/test/LLVMC/C++/unknown_suffix.unk
    llvm/branches/wendling/eh/test/LLVMC/C/emit-llvm-opt.c
      - copied unchanged from r117418, llvm/trunk/test/LLVMC/C/emit-llvm-opt.c
    llvm/branches/wendling/eh/test/LLVMC/LanguageMap.td
      - copied unchanged from r117418, llvm/trunk/test/LLVMC/LanguageMap.td
    llvm/branches/wendling/eh/test/LLVMC/MultipleOutputLanguages.td
      - copied unchanged from r117418, llvm/trunk/test/LLVMC/MultipleOutputLanguages.td
    llvm/branches/wendling/eh/test/Linker/PR8300.ll
      - copied unchanged from r117418, llvm/trunk/test/Linker/PR8300.ll
    llvm/branches/wendling/eh/test/Linker/metadata-a.ll
      - copied unchanged from r117418, llvm/trunk/test/Linker/metadata-a.ll
    llvm/branches/wendling/eh/test/Linker/metadata-b.ll
      - copied unchanged from r117418, llvm/trunk/test/Linker/metadata-b.ll
    llvm/branches/wendling/eh/test/MC/ARM/   (props changed)
      - copied from r117418, llvm/trunk/test/MC/ARM/
    llvm/branches/wendling/eh/test/MC/ARM/arm_instructions.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/arm_instructions.s
    llvm/branches/wendling/eh/test/MC/ARM/arm_word_directive.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/arm_word_directive.s
    llvm/branches/wendling/eh/test/MC/ARM/dg.exp
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/dg.exp
    llvm/branches/wendling/eh/test/MC/ARM/neon-absdiff-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-absdiff-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-add-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-add-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-bitwise-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-bitwise-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-cmp-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-cmp-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-minmax-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-minmax-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-mov-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-mov-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-mul-accum-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-mul-accum-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-mul-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-mul-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-pairwise-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-pairwise-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-reciprocal-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-reciprocal-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-satshift-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-satshift-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-shift-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-shift-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/neon-sub-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/neon-sub-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/simple-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/simple-encoding.ll
    llvm/branches/wendling/eh/test/MC/ARM/simple-fp-encoding.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ARM/simple-fp-encoding.ll
    llvm/branches/wendling/eh/test/MC/AsmParser/dash-n.s
      - copied unchanged from r117418, llvm/trunk/test/MC/AsmParser/dash-n.s
    llvm/branches/wendling/eh/test/MC/AsmParser/dollars-in-identifiers.s
      - copied unchanged from r117418, llvm/trunk/test/MC/AsmParser/dollars-in-identifiers.s
    llvm/branches/wendling/eh/test/MC/AsmParser/expr_symbol_modifiers.s
      - copied unchanged from r117418, llvm/trunk/test/MC/AsmParser/expr_symbol_modifiers.s
    llvm/branches/wendling/eh/test/MC/AsmParser/floating-literals.s
      - copied unchanged from r117418, llvm/trunk/test/MC/AsmParser/floating-literals.s
    llvm/branches/wendling/eh/test/MC/COFF/align-nops.s
      - copied unchanged from r117418, llvm/trunk/test/MC/COFF/align-nops.s
    llvm/branches/wendling/eh/test/MC/COFF/basic-coff.s
      - copied unchanged from r117418, llvm/trunk/test/MC/COFF/basic-coff.s
    llvm/branches/wendling/eh/test/MC/COFF/bss.s
      - copied unchanged from r117418, llvm/trunk/test/MC/COFF/bss.s
    llvm/branches/wendling/eh/test/MC/COFF/module-asm.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/COFF/module-asm.ll
    llvm/branches/wendling/eh/test/MC/COFF/simple-fixups.s
      - copied unchanged from r117418, llvm/trunk/test/MC/COFF/simple-fixups.s
    llvm/branches/wendling/eh/test/MC/COFF/switch-relocations.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/COFF/switch-relocations.ll
    llvm/branches/wendling/eh/test/MC/COFF/symbol-alias.s
      - copied unchanged from r117418, llvm/trunk/test/MC/COFF/symbol-alias.s
    llvm/branches/wendling/eh/test/MC/COFF/symbol-fragment-offset.s
      - copied unchanged from r117418, llvm/trunk/test/MC/COFF/symbol-fragment-offset.s
    llvm/branches/wendling/eh/test/MC/COFF/weak.s
      - copied unchanged from r117418, llvm/trunk/test/MC/COFF/weak.s
    llvm/branches/wendling/eh/test/MC/ELF/
      - copied from r117418, llvm/trunk/test/MC/ELF/
    llvm/branches/wendling/eh/test/MC/ELF/alias-reloc.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/alias-reloc.s
    llvm/branches/wendling/eh/test/MC/ELF/alias.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/alias.s
    llvm/branches/wendling/eh/test/MC/ELF/align-bss.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/align-bss.s
    llvm/branches/wendling/eh/test/MC/ELF/align-nops.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/align-nops.s
    llvm/branches/wendling/eh/test/MC/ELF/align-size.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/align-size.s
    llvm/branches/wendling/eh/test/MC/ELF/align-text.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/align-text.s
    llvm/branches/wendling/eh/test/MC/ELF/align.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/align.s
    llvm/branches/wendling/eh/test/MC/ELF/basic-elf.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/basic-elf.ll
    llvm/branches/wendling/eh/test/MC/ELF/bss.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/bss.ll
    llvm/branches/wendling/eh/test/MC/ELF/common.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/common.s
    llvm/branches/wendling/eh/test/MC/ELF/common2.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/common2.s
    llvm/branches/wendling/eh/test/MC/ELF/dg.exp
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/dg.exp
    llvm/branches/wendling/eh/test/MC/ELF/diff.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/diff.s
    llvm/branches/wendling/eh/test/MC/ELF/diff2.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/diff2.s
    llvm/branches/wendling/eh/test/MC/ELF/elf_directive_previous.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/elf_directive_previous.s
    llvm/branches/wendling/eh/test/MC/ELF/elf_directive_section.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/elf_directive_section.s
    llvm/branches/wendling/eh/test/MC/ELF/empty.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/empty.s
    llvm/branches/wendling/eh/test/MC/ELF/entsize.ll
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/entsize.ll
    llvm/branches/wendling/eh/test/MC/ELF/entsize.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/entsize.s
    llvm/branches/wendling/eh/test/MC/ELF/file.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/file.s
    llvm/branches/wendling/eh/test/MC/ELF/global-offset.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/global-offset.s
    llvm/branches/wendling/eh/test/MC/ELF/got.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/got.s
    llvm/branches/wendling/eh/test/MC/ELF/ident.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/ident.s
    llvm/branches/wendling/eh/test/MC/ELF/local-reloc.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/local-reloc.s
    llvm/branches/wendling/eh/test/MC/ELF/merge.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/merge.s
    llvm/branches/wendling/eh/test/MC/ELF/norelocation.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/norelocation.s
    llvm/branches/wendling/eh/test/MC/ELF/pic-diff.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/pic-diff.s
    llvm/branches/wendling/eh/test/MC/ELF/plt.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/plt.s
    llvm/branches/wendling/eh/test/MC/ELF/relax-arith.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/relax-arith.s
    llvm/branches/wendling/eh/test/MC/ELF/relax.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/relax.s
    llvm/branches/wendling/eh/test/MC/ELF/relocation-386.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/relocation-386.s
    llvm/branches/wendling/eh/test/MC/ELF/relocation.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/relocation.s
    llvm/branches/wendling/eh/test/MC/ELF/section.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/section.s
    llvm/branches/wendling/eh/test/MC/ELF/size.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/size.s
    llvm/branches/wendling/eh/test/MC/ELF/sleb.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/sleb.s
    llvm/branches/wendling/eh/test/MC/ELF/uleb.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/uleb.s
    llvm/branches/wendling/eh/test/MC/ELF/undef.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/undef.s
    llvm/branches/wendling/eh/test/MC/ELF/undef2.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/undef2.s
    llvm/branches/wendling/eh/test/MC/ELF/weak.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/weak.s
    llvm/branches/wendling/eh/test/MC/ELF/zero.s
      - copied unchanged from r117418, llvm/trunk/test/MC/ELF/zero.s
    llvm/branches/wendling/eh/test/MC/X86/   (props changed)
      - copied from r117418, llvm/trunk/test/MC/X86/
    llvm/branches/wendling/eh/test/MC/X86/3DNow.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/3DNow.s
    llvm/branches/wendling/eh/test/MC/X86/dg.exp
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/dg.exp
    llvm/branches/wendling/eh/test/MC/X86/x86-32-avx.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86-32-avx.s
    llvm/branches/wendling/eh/test/MC/X86/x86-32-coverage.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86-32-coverage.s
    llvm/branches/wendling/eh/test/MC/X86/x86-32-fma3.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86-32-fma3.s
    llvm/branches/wendling/eh/test/MC/X86/x86-32.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86-32.s
    llvm/branches/wendling/eh/test/MC/X86/x86-64.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86-64.s
    llvm/branches/wendling/eh/test/MC/X86/x86_64-avx-clmul-encoding.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86_64-avx-clmul-encoding.s
    llvm/branches/wendling/eh/test/MC/X86/x86_64-avx-encoding.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86_64-avx-encoding.s
    llvm/branches/wendling/eh/test/MC/X86/x86_64-encoding.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86_64-encoding.s
    llvm/branches/wendling/eh/test/MC/X86/x86_64-fma3-encoding.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86_64-fma3-encoding.s
    llvm/branches/wendling/eh/test/MC/X86/x86_64-imm-widths.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86_64-imm-widths.s
    llvm/branches/wendling/eh/test/MC/X86/x86_directives.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86_directives.s
    llvm/branches/wendling/eh/test/MC/X86/x86_errors.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86_errors.s
    llvm/branches/wendling/eh/test/MC/X86/x86_operands.s
      - copied unchanged from r117418, llvm/trunk/test/MC/X86/x86_operands.s
    llvm/branches/wendling/eh/test/Other/close-stderr.ll
      - copied unchanged from r117418, llvm/trunk/test/Other/close-stderr.ll
    llvm/branches/wendling/eh/test/Other/extract.ll
      - copied unchanged from r117418, llvm/trunk/test/Other/extract.ll
    llvm/branches/wendling/eh/test/Scripts/common_dump.py
      - copied unchanged from r117418, llvm/trunk/test/Scripts/common_dump.py
    llvm/branches/wendling/eh/test/Scripts/elf-dump
      - copied unchanged from r117418, llvm/trunk/test/Scripts/elf-dump
    llvm/branches/wendling/eh/test/Scripts/elf-dump.bat
      - copied unchanged from r117418, llvm/trunk/test/Scripts/elf-dump.bat
    llvm/branches/wendling/eh/test/TableGen/Dag.td
      - copied unchanged from r117418, llvm/trunk/test/TableGen/Dag.td
    llvm/branches/wendling/eh/test/TableGen/FieldAccess.td
      - copied unchanged from r117418, llvm/trunk/test/TableGen/FieldAccess.td
    llvm/branches/wendling/eh/test/TableGen/ListManip.td
      - copied unchanged from r117418, llvm/trunk/test/TableGen/ListManip.td
    llvm/branches/wendling/eh/test/Transforms/CorrelatedValuePropagation/
      - copied from r117418, llvm/trunk/test/Transforms/CorrelatedValuePropagation/
    llvm/branches/wendling/eh/test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll
    llvm/branches/wendling/eh/test/Transforms/CorrelatedValuePropagation/2010-09-26-MergeConstantRange.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/CorrelatedValuePropagation/2010-09-26-MergeConstantRange.ll
    llvm/branches/wendling/eh/test/Transforms/CorrelatedValuePropagation/basic.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/CorrelatedValuePropagation/basic.ll
    llvm/branches/wendling/eh/test/Transforms/CorrelatedValuePropagation/crash.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/CorrelatedValuePropagation/crash.ll
    llvm/branches/wendling/eh/test/Transforms/CorrelatedValuePropagation/dg.exp
      - copied unchanged from r117418, llvm/trunk/test/Transforms/CorrelatedValuePropagation/dg.exp
    llvm/branches/wendling/eh/test/Transforms/GVN/load-pre-licm.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/GVN/load-pre-licm.ll
    llvm/branches/wendling/eh/test/Transforms/GlobalOpt/2010-10-19-WeakOdr.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/GlobalOpt/2010-10-19-WeakOdr.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/bit-checks.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/InstCombine/bit-checks.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/bitcast-store.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/InstCombine/bitcast-store.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/bitcast.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/InstCombine/bitcast.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/fold-calls.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/InstCombine/fold-calls.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/neon-intrinsics.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/InstCombine/neon-intrinsics.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/sqrt.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/InstCombine/sqrt.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/trunc.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/InstCombine/trunc.ll
    llvm/branches/wendling/eh/test/Transforms/JumpThreading/2010-08-26-and.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/JumpThreading/2010-08-26-and.ll
    llvm/branches/wendling/eh/test/Transforms/JumpThreading/lvi-load.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/JumpThreading/lvi-load.ll
    llvm/branches/wendling/eh/test/Transforms/LICM/crash.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/LICM/crash.ll
    llvm/branches/wendling/eh/test/Transforms/LoopRotate/basic.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/LoopRotate/basic.ll
    llvm/branches/wendling/eh/test/Transforms/LoopSimplify/indirectbr-backedge.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/LoopSimplify/indirectbr-backedge.ll
    llvm/branches/wendling/eh/test/Transforms/LoopSimplify/preserve-scev.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/LoopSimplify/preserve-scev.ll
    llvm/branches/wendling/eh/test/Transforms/LoopUnswitch/infinite-loop.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/LoopUnswitch/infinite-loop.ll
    llvm/branches/wendling/eh/test/Transforms/LowerAtomic/   (props changed)
      - copied from r117418, llvm/trunk/test/Transforms/LowerAtomic/
    llvm/branches/wendling/eh/test/Transforms/LowerAtomic/atomic-load.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/LowerAtomic/atomic-load.ll
    llvm/branches/wendling/eh/test/Transforms/LowerAtomic/atomic-swap.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/LowerAtomic/atomic-swap.ll
    llvm/branches/wendling/eh/test/Transforms/LowerAtomic/barrier.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/LowerAtomic/barrier.ll
    llvm/branches/wendling/eh/test/Transforms/LowerAtomic/dg.exp
      - copied unchanged from r117418, llvm/trunk/test/Transforms/LowerAtomic/dg.exp
    llvm/branches/wendling/eh/test/Transforms/MemCpyOpt/loadstore-sret.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/MemCpyOpt/loadstore-sret.ll
    llvm/branches/wendling/eh/test/Transforms/PartialSpecialize/heuristics.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/PartialSpecialize/heuristics.ll
    llvm/branches/wendling/eh/test/Transforms/SCCP/ipsccp-addr-taken.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/SCCP/ipsccp-addr-taken.ll
    llvm/branches/wendling/eh/test/Transforms/SimplifyCFG/2010-10-24-OnlyUnwindInEntry.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/SimplifyCFG/2010-10-24-OnlyUnwindInEntry.ll
    llvm/branches/wendling/eh/test/Transforms/SimplifyCFG/indirectbr.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/SimplifyCFG/indirectbr.ll
    llvm/branches/wendling/eh/test/Transforms/SimplifyLibCalls/StrPBrk.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/SimplifyLibCalls/StrPBrk.ll
    llvm/branches/wendling/eh/test/Transforms/SimplifyLibCalls/StrRChr.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/SimplifyLibCalls/StrRChr.ll
    llvm/branches/wendling/eh/test/Transforms/SimplifyLibCalls/StrSpn.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/SimplifyLibCalls/StrSpn.ll
    llvm/branches/wendling/eh/test/Transforms/StripSymbols/2010-08-25-crash.ll
      - copied unchanged from r117418, llvm/trunk/test/Transforms/StripSymbols/2010-08-25-crash.ll
    llvm/branches/wendling/eh/test/Verifier/2010-08-07-PointerIntrinsic.ll
      - copied unchanged from r117418, llvm/trunk/test/Verifier/2010-08-07-PointerIntrinsic.ll
    llvm/branches/wendling/eh/tools/bugpoint-passes/   (props changed)
      - copied from r117418, llvm/trunk/tools/bugpoint-passes/
    llvm/branches/wendling/eh/tools/bugpoint-passes/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/tools/bugpoint-passes/CMakeLists.txt
    llvm/branches/wendling/eh/tools/bugpoint-passes/Makefile
      - copied unchanged from r117418, llvm/trunk/tools/bugpoint-passes/Makefile
    llvm/branches/wendling/eh/tools/bugpoint-passes/TestPasses.cpp
      - copied unchanged from r117418, llvm/trunk/tools/bugpoint-passes/TestPasses.cpp
    llvm/branches/wendling/eh/tools/bugpoint-passes/bugpoint.exports
      - copied unchanged from r117418, llvm/trunk/tools/bugpoint-passes/bugpoint.exports
    llvm/branches/wendling/eh/tools/llvmc/examples/
      - copied from r117418, llvm/trunk/tools/llvmc/examples/
    llvm/branches/wendling/eh/tools/llvmc/examples/Hello/
      - copied from r117418, llvm/trunk/tools/llvmc/examples/Hello/
    llvm/branches/wendling/eh/tools/llvmc/examples/Hello/Hello.cpp
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Hello/Hello.cpp
    llvm/branches/wendling/eh/tools/llvmc/examples/Hello/Makefile
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Hello/Makefile
    llvm/branches/wendling/eh/tools/llvmc/examples/Makefile
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Makefile
    llvm/branches/wendling/eh/tools/llvmc/examples/Simple/
      - copied from r117418, llvm/trunk/tools/llvmc/examples/Simple/
    llvm/branches/wendling/eh/tools/llvmc/examples/Simple/Makefile
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Simple/Makefile
    llvm/branches/wendling/eh/tools/llvmc/examples/Simple/Simple.cpp
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Simple/Simple.cpp
    llvm/branches/wendling/eh/tools/llvmc/examples/Simple/Simple.td
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Simple/Simple.td
    llvm/branches/wendling/eh/tools/llvmc/examples/Skeleton/
      - copied from r117418, llvm/trunk/tools/llvmc/examples/Skeleton/
    llvm/branches/wendling/eh/tools/llvmc/examples/Skeleton/AutoGenerated.td
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Skeleton/AutoGenerated.td
    llvm/branches/wendling/eh/tools/llvmc/examples/Skeleton/Hooks.cpp
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Skeleton/Hooks.cpp
    llvm/branches/wendling/eh/tools/llvmc/examples/Skeleton/Main.cpp
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Skeleton/Main.cpp
    llvm/branches/wendling/eh/tools/llvmc/examples/Skeleton/Makefile
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Skeleton/Makefile
    llvm/branches/wendling/eh/tools/llvmc/examples/Skeleton/README
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/Skeleton/README
    llvm/branches/wendling/eh/tools/llvmc/examples/mcc16/
      - copied from r117418, llvm/trunk/tools/llvmc/examples/mcc16/
    llvm/branches/wendling/eh/tools/llvmc/examples/mcc16/Hooks.cpp
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/mcc16/Hooks.cpp
    llvm/branches/wendling/eh/tools/llvmc/examples/mcc16/Main.cpp
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/mcc16/Main.cpp
    llvm/branches/wendling/eh/tools/llvmc/examples/mcc16/Makefile
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/mcc16/Makefile
    llvm/branches/wendling/eh/tools/llvmc/examples/mcc16/PIC16.td
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/mcc16/PIC16.td
    llvm/branches/wendling/eh/tools/llvmc/examples/mcc16/README
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/examples/mcc16/README
    llvm/branches/wendling/eh/tools/llvmc/src/   (props changed)
      - copied from r117418, llvm/trunk/tools/llvmc/src/
    llvm/branches/wendling/eh/tools/llvmc/src/AutoGenerated.td
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/src/AutoGenerated.td
    llvm/branches/wendling/eh/tools/llvmc/src/Base.td.in
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/src/Base.td.in
    llvm/branches/wendling/eh/tools/llvmc/src/Clang.td
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/src/Clang.td
    llvm/branches/wendling/eh/tools/llvmc/src/Hooks.cpp
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/src/Hooks.cpp
    llvm/branches/wendling/eh/tools/llvmc/src/Main.cpp
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/src/Main.cpp
    llvm/branches/wendling/eh/tools/llvmc/src/Makefile
      - copied unchanged from r117418, llvm/trunk/tools/llvmc/src/Makefile
    llvm/branches/wendling/eh/unittests/Analysis/   (props changed)
      - copied from r117418, llvm/trunk/unittests/Analysis/
    llvm/branches/wendling/eh/unittests/Analysis/Makefile
      - copied unchanged from r117418, llvm/trunk/unittests/Analysis/Makefile
    llvm/branches/wendling/eh/unittests/Analysis/ScalarEvolutionTest.cpp
      - copied unchanged from r117418, llvm/trunk/unittests/Analysis/ScalarEvolutionTest.cpp
    llvm/branches/wendling/eh/unittests/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/unittests/CMakeLists.txt
    llvm/branches/wendling/eh/unittests/Support/EndianTest.cpp
      - copied unchanged from r117418, llvm/trunk/unittests/Support/EndianTest.cpp
    llvm/branches/wendling/eh/unittests/Support/SwapByteOrderTest.cpp
      - copied unchanged from r117418, llvm/trunk/unittests/Support/SwapByteOrderTest.cpp
    llvm/branches/wendling/eh/unittests/VMCore/ValueMapTest.cpp
      - copied unchanged from r117418, llvm/trunk/unittests/VMCore/ValueMapTest.cpp
    llvm/branches/wendling/eh/utils/GetRepositoryPath
      - copied unchanged from r117418, llvm/trunk/utils/GetRepositoryPath
    llvm/branches/wendling/eh/utils/KillTheDoctor/
      - copied from r117418, llvm/trunk/utils/KillTheDoctor/
    llvm/branches/wendling/eh/utils/KillTheDoctor/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/utils/KillTheDoctor/CMakeLists.txt
    llvm/branches/wendling/eh/utils/KillTheDoctor/KillTheDoctor.cpp
      - copied unchanged from r117418, llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp
    llvm/branches/wendling/eh/utils/KillTheDoctor/system_error.cpp
      - copied unchanged from r117418, llvm/trunk/utils/KillTheDoctor/system_error.cpp
    llvm/branches/wendling/eh/utils/KillTheDoctor/system_error.h
      - copied unchanged from r117418, llvm/trunk/utils/KillTheDoctor/system_error.h
    llvm/branches/wendling/eh/utils/TableGen/StringMatcher.cpp
      - copied unchanged from r117418, llvm/trunk/utils/TableGen/StringMatcher.cpp
    llvm/branches/wendling/eh/utils/TableGen/StringMatcher.h
      - copied unchanged from r117418, llvm/trunk/utils/TableGen/StringMatcher.h
    llvm/branches/wendling/eh/utils/kate/
      - copied from r117418, llvm/trunk/utils/kate/
    llvm/branches/wendling/eh/utils/kate/README
      - copied unchanged from r117418, llvm/trunk/utils/kate/README
    llvm/branches/wendling/eh/utils/kate/llvm.xml
      - copied unchanged from r117418, llvm/trunk/utils/kate/llvm.xml
    llvm/branches/wendling/eh/utils/lit/lit/main.py
      - copied unchanged from r117418, llvm/trunk/utils/lit/lit/main.py
    llvm/branches/wendling/eh/utils/llvm-lit/
      - copied from r117418, llvm/trunk/utils/llvm-lit/
    llvm/branches/wendling/eh/utils/llvm-lit/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/utils/llvm-lit/CMakeLists.txt
    llvm/branches/wendling/eh/utils/llvm-lit/Makefile
      - copied unchanged from r117418, llvm/trunk/utils/llvm-lit/Makefile
    llvm/branches/wendling/eh/utils/llvm-lit/llvm-lit.in
      - copied unchanged from r117418, llvm/trunk/utils/llvm-lit/llvm-lit.in
    llvm/branches/wendling/eh/utils/release/
      - copied from r117418, llvm/trunk/utils/release/
    llvm/branches/wendling/eh/utils/release/test-release.sh
      - copied unchanged from r117418, llvm/trunk/utils/release/test-release.sh
    llvm/branches/wendling/eh/utils/test_debuginfo.pl
      - copied unchanged from r117418, llvm/trunk/utils/test_debuginfo.pl
    llvm/branches/wendling/eh/utils/unittest/CMakeLists.txt
      - copied unchanged from r117418, llvm/trunk/utils/unittest/CMakeLists.txt
Removed:
    llvm/branches/wendling/eh/bindings/ada/
    llvm/branches/wendling/eh/include/llvm/Analysis/PointerTracking.h
    llvm/branches/wendling/eh/include/llvm/Assembly/AsmAnnotationWriter.h
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkage.h
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkageMacros.h
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/Plugin.h
    llvm/branches/wendling/eh/include/llvm/Support/SlowOperationInformer.h
    llvm/branches/wendling/eh/include/llvm/Transforms/Utils/SSI.h
    llvm/branches/wendling/eh/lib/Analysis/PointerTracking.cpp
    llvm/branches/wendling/eh/lib/CodeGen/OptimizeExts.cpp
    llvm/branches/wendling/eh/lib/CodeGen/PBQP/
    llvm/branches/wendling/eh/lib/CompilerDriver/Plugin.cpp
    llvm/branches/wendling/eh/lib/Support/SlowOperationInformer.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/AsmPrinter/
    llvm/branches/wendling/eh/lib/Target/ARM/NEONPreAllocPass.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/AsmPrinter/
    llvm/branches/wendling/eh/lib/Target/MSIL/
    llvm/branches/wendling/eh/lib/Target/MSP430/AsmPrinter/
    llvm/branches/wendling/eh/lib/Target/PIC16/
    llvm/branches/wendling/eh/lib/Target/X86/AsmPrinter/
    llvm/branches/wendling/eh/lib/Target/X86/X86Instr64bit.td
    llvm/branches/wendling/eh/lib/Transforms/Scalar/ABCD.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/LoopIndexSplit.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/SSI.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/ValueMapper.h
    llvm/branches/wendling/eh/runtime/libprofile/exported_symbols.lst
    llvm/branches/wendling/eh/test/Analysis/PointerTracking/
    llvm/branches/wendling/eh/test/Assembler/2010-01-06-UnionType.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2009-08-21-PostRAKill4.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2009-09-01-PostRAProlog.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/remat.ll
    llvm/branches/wendling/eh/test/CodeGen/PIC16/
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/machine-licm-vdup.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/thumb2-badreg-operands.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/cmp-test.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/cmp0.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/cmp2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/narrow_op-2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/stack-color-with-reg.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-10.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-3.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-4.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-5.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-6.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-7.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-8.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-9.ll
    llvm/branches/wendling/eh/test/DebugInfo/2010-01-18-DbgValue.ll
    llvm/branches/wendling/eh/test/DebugInfo/2010-02-01-DbgValueCrash.ll
    llvm/branches/wendling/eh/test/DebugInfo/2010-05-25-DotDebugLoc.ll
    llvm/branches/wendling/eh/test/DebugInfo/2010-05-28-Crash.ll
    llvm/branches/wendling/eh/test/DebugInfo/2010-06-01-DeadArg-DbgInfo.ll
    llvm/branches/wendling/eh/test/Feature/unions.ll
    llvm/branches/wendling/eh/test/Integer/a15.ll
    llvm/branches/wendling/eh/test/Integer/a15.ll.out
    llvm/branches/wendling/eh/test/Integer/a17.ll
    llvm/branches/wendling/eh/test/Integer/a17.ll.out
    llvm/branches/wendling/eh/test/Integer/a31.ll
    llvm/branches/wendling/eh/test/Integer/a31.ll.out
    llvm/branches/wendling/eh/test/Integer/a33.ll
    llvm/branches/wendling/eh/test/Integer/a33.ll.out
    llvm/branches/wendling/eh/test/Integer/a63.ll
    llvm/branches/wendling/eh/test/Integer/a63.ll.out
    llvm/branches/wendling/eh/test/Integer/a7.ll
    llvm/branches/wendling/eh/test/Integer/a7.ll.out
    llvm/branches/wendling/eh/test/Integer/a9.ll
    llvm/branches/wendling/eh/test/Integer/a9.ll.out
    llvm/branches/wendling/eh/test/LLVMC/ExternOptions.td
    llvm/branches/wendling/eh/test/LLVMC/MultiplePluginPriorities.td
    llvm/branches/wendling/eh/test/MC/AsmParser/ARM/
    llvm/branches/wendling/eh/test/MC/AsmParser/ELF/
    llvm/branches/wendling/eh/test/MC/AsmParser/X86/
    llvm/branches/wendling/eh/test/MC/COFF/basic-coff.ll
    llvm/branches/wendling/eh/test/Other/2008-08-14-PassManager.ll
    llvm/branches/wendling/eh/test/TableGen/DagDefSubst.td
    llvm/branches/wendling/eh/test/TableGen/DagIntSubst.td
    llvm/branches/wendling/eh/test/TableGen/nameconcat.td
    llvm/branches/wendling/eh/test/Transforms/ABCD/
    llvm/branches/wendling/eh/test/Transforms/IndVarSimplify/2003-12-10-IndVarDeadCode.ll
    llvm/branches/wendling/eh/test/Transforms/IndVarSimplify/loop-invariant-step.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/2010-07-19-sqrt.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/align-inc.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/bitcast-scalar-to-vector.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/shift-simplify.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/shift-trunc-shift.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/trunc-mask-ext.ll
    llvm/branches/wendling/eh/test/Transforms/LICM/2009-03-25-AliasSetTracker.ll
    llvm/branches/wendling/eh/test/Transforms/LoopIndexSplit/
    llvm/branches/wendling/eh/test/Transforms/LoopStrengthReduce/2008-08-06-CmpStride.ll
    llvm/branches/wendling/eh/test/Transforms/LoopStrengthReduce/2009-02-09-ivs-different-sizes.ll
    llvm/branches/wendling/eh/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-0.ll
    llvm/branches/wendling/eh/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-1.ll
    llvm/branches/wendling/eh/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-2.ll
    llvm/branches/wendling/eh/test/Transforms/LoopStrengthReduce/insert-positions.ll
    llvm/branches/wendling/eh/test/Transforms/SSI/
    llvm/branches/wendling/eh/test/Transforms/TailCallElim/accum_recursion_constant_arg.ll
    llvm/branches/wendling/eh/test/Transforms/TailCallElim/switch.ll
    llvm/branches/wendling/eh/tools/bugpoint/TestPasses.cpp
    llvm/branches/wendling/eh/tools/llvmc/driver/Main.cpp
    llvm/branches/wendling/eh/tools/llvmc/driver/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/Hello/Hello.cpp
    llvm/branches/wendling/eh/tools/llvmc/example/Hello/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/Simple/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/Simple/PluginMain.cpp
    llvm/branches/wendling/eh/tools/llvmc/example/Simple/Simple.td
    llvm/branches/wendling/eh/tools/llvmc/example/Skeleton/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/Skeleton/README
    llvm/branches/wendling/eh/tools/llvmc/example/Skeleton/driver/Main.cpp
    llvm/branches/wendling/eh/tools/llvmc/example/Skeleton/driver/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/Skeleton/plugins/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/Skeleton/plugins/Plugin/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/Skeleton/plugins/Plugin/Plugin.td
    llvm/branches/wendling/eh/tools/llvmc/example/Skeleton/plugins/Plugin/PluginMain.cpp
    llvm/branches/wendling/eh/tools/llvmc/example/mcc16/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/mcc16/README
    llvm/branches/wendling/eh/tools/llvmc/example/mcc16/driver/Main.cpp
    llvm/branches/wendling/eh/tools/llvmc/example/mcc16/driver/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/mcc16/plugins/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/mcc16/plugins/PIC16Base/Makefile
    llvm/branches/wendling/eh/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td
    llvm/branches/wendling/eh/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp
    llvm/branches/wendling/eh/tools/llvmc/plugins/Base/Base.td.in
    llvm/branches/wendling/eh/tools/llvmc/plugins/Base/Hooks.cpp
    llvm/branches/wendling/eh/tools/llvmc/plugins/Base/Makefile
    llvm/branches/wendling/eh/tools/llvmc/plugins/Base/PluginMain.cpp
    llvm/branches/wendling/eh/tools/llvmc/plugins/Clang/Clang.td
    llvm/branches/wendling/eh/tools/llvmc/plugins/Clang/Makefile
    llvm/branches/wendling/eh/tools/llvmc/plugins/Clang/PluginMain.cpp
    llvm/branches/wendling/eh/tools/llvmc/plugins/Makefile
    llvm/branches/wendling/eh/unittests/ADT/ValueMapTest.cpp
    llvm/branches/wendling/eh/utils/OldenDataRecover.pl
    llvm/branches/wendling/eh/utils/RegressionFinder.pl
    llvm/branches/wendling/eh/utils/lit/lit/lit.py
    llvm/branches/wendling/eh/utils/mkpatch
    llvm/branches/wendling/eh/utils/userloc.pl
Modified:
    llvm/branches/wendling/eh/   (props changed)
    llvm/branches/wendling/eh/CMakeLists.txt
    llvm/branches/wendling/eh/CREDITS.TXT
    llvm/branches/wendling/eh/Makefile
    llvm/branches/wendling/eh/Makefile.config.in
    llvm/branches/wendling/eh/Makefile.rules
    llvm/branches/wendling/eh/ModuleInfo.txt
    llvm/branches/wendling/eh/autoconf/configure.ac
    llvm/branches/wendling/eh/autoconf/m4/link_options.m4
    llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.ml
    llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.mli
    llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm_ocaml.c
    llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.ml
    llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.mli
    llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/scalar_opts_ocaml.c
    llvm/branches/wendling/eh/cmake/config-ix.cmake
    llvm/branches/wendling/eh/cmake/modules/AddLLVM.cmake
    llvm/branches/wendling/eh/cmake/modules/GetTargetTriple.cmake
    llvm/branches/wendling/eh/cmake/modules/LLVMProcessSources.cmake
    llvm/branches/wendling/eh/cmake/modules/TableGen.cmake
    llvm/branches/wendling/eh/configure
    llvm/branches/wendling/eh/docs/AliasAnalysis.html
    llvm/branches/wendling/eh/docs/BitCodeFormat.html
    llvm/branches/wendling/eh/docs/CMake.html
    llvm/branches/wendling/eh/docs/CodeGenerator.html
    llvm/branches/wendling/eh/docs/CodingStandards.html
    llvm/branches/wendling/eh/docs/CommandGuide/FileCheck.pod
    llvm/branches/wendling/eh/docs/CommandGuide/bugpoint.pod
    llvm/branches/wendling/eh/docs/CommandGuide/index.html
    llvm/branches/wendling/eh/docs/DeveloperPolicy.html
    llvm/branches/wendling/eh/docs/ExceptionHandling.html
    llvm/branches/wendling/eh/docs/GCCFEBuildInstrs.html
    llvm/branches/wendling/eh/docs/GetElementPtr.html
    llvm/branches/wendling/eh/docs/GettingStarted.html
    llvm/branches/wendling/eh/docs/GettingStartedVS.html
    llvm/branches/wendling/eh/docs/GoldPlugin.html
    llvm/branches/wendling/eh/docs/LangRef.html
    llvm/branches/wendling/eh/docs/LinkTimeOptimization.html
    llvm/branches/wendling/eh/docs/MakefileGuide.html
    llvm/branches/wendling/eh/docs/Passes.html
    llvm/branches/wendling/eh/docs/ProgrammersManual.html
    llvm/branches/wendling/eh/docs/ReleaseNotes.html
    llvm/branches/wendling/eh/docs/SourceLevelDebugging.html
    llvm/branches/wendling/eh/docs/TableGenFundamentals.html
    llvm/branches/wendling/eh/docs/TestingGuide.html
    llvm/branches/wendling/eh/docs/UsingLibraries.html
    llvm/branches/wendling/eh/docs/WritingAnLLVMPass.html
    llvm/branches/wendling/eh/docs/tutorial/LangImpl3.html
    llvm/branches/wendling/eh/docs/tutorial/LangImpl5.html
    llvm/branches/wendling/eh/docs/tutorial/LangImpl6.html
    llvm/branches/wendling/eh/docs/tutorial/LangImpl7.html
    llvm/branches/wendling/eh/examples/BrainF/BrainF.cpp
    llvm/branches/wendling/eh/examples/ExceptionDemo/CMakeLists.txt
    llvm/branches/wendling/eh/examples/Fibonacci/fibonacci.cpp
    llvm/branches/wendling/eh/examples/Kaleidoscope/Chapter7/CMakeLists.txt
    llvm/branches/wendling/eh/examples/Makefile
    llvm/branches/wendling/eh/examples/ModuleMaker/README.txt
    llvm/branches/wendling/eh/include/llvm-c/Core.h
    llvm/branches/wendling/eh/include/llvm-c/Target.h
    llvm/branches/wendling/eh/include/llvm-c/Transforms/Scalar.h
    llvm/branches/wendling/eh/include/llvm-c/lto.h
    llvm/branches/wendling/eh/include/llvm/ADT/APInt.h
    llvm/branches/wendling/eh/include/llvm/ADT/BitVector.h
    llvm/branches/wendling/eh/include/llvm/ADT/DenseMap.h
    llvm/branches/wendling/eh/include/llvm/ADT/DenseSet.h
    llvm/branches/wendling/eh/include/llvm/ADT/DepthFirstIterator.h
    llvm/branches/wendling/eh/include/llvm/ADT/FoldingSet.h
    llvm/branches/wendling/eh/include/llvm/ADT/ImmutableIntervalMap.h
    llvm/branches/wendling/eh/include/llvm/ADT/STLExtras.h
    llvm/branches/wendling/eh/include/llvm/ADT/SetVector.h
    llvm/branches/wendling/eh/include/llvm/ADT/SmallBitVector.h
    llvm/branches/wendling/eh/include/llvm/ADT/SmallVector.h
    llvm/branches/wendling/eh/include/llvm/ADT/StringMap.h
    llvm/branches/wendling/eh/include/llvm/ADT/StringRef.h
    llvm/branches/wendling/eh/include/llvm/ADT/StringSwitch.h
    llvm/branches/wendling/eh/include/llvm/ADT/Triple.h
    llvm/branches/wendling/eh/include/llvm/ADT/ValueMap.h
    llvm/branches/wendling/eh/include/llvm/ADT/ilist.h
    llvm/branches/wendling/eh/include/llvm/Analysis/AliasAnalysis.h
    llvm/branches/wendling/eh/include/llvm/Analysis/AliasSetTracker.h
    llvm/branches/wendling/eh/include/llvm/Analysis/CodeMetrics.h
    llvm/branches/wendling/eh/include/llvm/Analysis/DOTGraphTraitsPass.h
    llvm/branches/wendling/eh/include/llvm/Analysis/DebugInfo.h
    llvm/branches/wendling/eh/include/llvm/Analysis/DominatorInternals.h
    llvm/branches/wendling/eh/include/llvm/Analysis/Dominators.h
    llvm/branches/wendling/eh/include/llvm/Analysis/FindUsedTypes.h
    llvm/branches/wendling/eh/include/llvm/Analysis/InlineCost.h
    llvm/branches/wendling/eh/include/llvm/Analysis/InstructionSimplify.h
    llvm/branches/wendling/eh/include/llvm/Analysis/IntervalPartition.h
    llvm/branches/wendling/eh/include/llvm/Analysis/LazyValueInfo.h
    llvm/branches/wendling/eh/include/llvm/Analysis/LibCallAliasAnalysis.h
    llvm/branches/wendling/eh/include/llvm/Analysis/LibCallSemantics.h
    llvm/branches/wendling/eh/include/llvm/Analysis/LoopDependenceAnalysis.h
    llvm/branches/wendling/eh/include/llvm/Analysis/LoopInfo.h
    llvm/branches/wendling/eh/include/llvm/Analysis/LoopPass.h
    llvm/branches/wendling/eh/include/llvm/Analysis/MemoryDependenceAnalysis.h
    llvm/branches/wendling/eh/include/llvm/Analysis/Passes.h
    llvm/branches/wendling/eh/include/llvm/Analysis/PostDominators.h
    llvm/branches/wendling/eh/include/llvm/Analysis/RegionInfo.h
    llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolution.h
    llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolutionExpressions.h
    llvm/branches/wendling/eh/include/llvm/Analysis/ValueTracking.h
    llvm/branches/wendling/eh/include/llvm/Attributes.h
    llvm/branches/wendling/eh/include/llvm/AutoUpgrade.h
    llvm/branches/wendling/eh/include/llvm/Bitcode/Archive.h
    llvm/branches/wendling/eh/include/llvm/Bitcode/BitstreamWriter.h
    llvm/branches/wendling/eh/include/llvm/Bitcode/LLVMBitCodes.h
    llvm/branches/wendling/eh/include/llvm/Bitcode/ReaderWriter.h
    llvm/branches/wendling/eh/include/llvm/CallGraphSCCPass.h
    llvm/branches/wendling/eh/include/llvm/CallingConv.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/Analysis.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/AsmPrinter.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/CalcSpillWeights.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/CallingConvLower.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/FastISel.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/FunctionLoweringInfo.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/GCMetadata.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/ISDOpcodes.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/LinkAllCodegenComponents.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/LiveInterval.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/LiveIntervalAnalysis.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/LiveStackAnalysis.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/LiveVariables.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineBasicBlock.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineDominators.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFrameInfo.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunction.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunctionPass.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstr.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstrBuilder.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineLoopInfo.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineMemOperand.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineModuleInfo.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineOperand.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/MachineRegisterInfo.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/Passes.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/PostRAHazardRecognizer.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/ProcessImplicitDefs.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAG.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGISel.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGNodes.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/SlotIndexes.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.h
    llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.td
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/BuiltinOptions.h
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/Common.td
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/CompilationGraph.h
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/Main.inc
    llvm/branches/wendling/eh/include/llvm/CompilerDriver/Tool.h
    llvm/branches/wendling/eh/include/llvm/Config/   (props changed)
    llvm/branches/wendling/eh/include/llvm/Config/config.h.cmake
    llvm/branches/wendling/eh/include/llvm/Config/config.h.in
    llvm/branches/wendling/eh/include/llvm/Constant.h
    llvm/branches/wendling/eh/include/llvm/Constants.h
    llvm/branches/wendling/eh/include/llvm/DerivedTypes.h
    llvm/branches/wendling/eh/include/llvm/ExecutionEngine/ExecutionEngine.h
    llvm/branches/wendling/eh/include/llvm/Function.h
    llvm/branches/wendling/eh/include/llvm/GlobalValue.h
    llvm/branches/wendling/eh/include/llvm/GlobalVariable.h
    llvm/branches/wendling/eh/include/llvm/InlineAsm.h
    llvm/branches/wendling/eh/include/llvm/Instructions.h
    llvm/branches/wendling/eh/include/llvm/IntrinsicInst.h
    llvm/branches/wendling/eh/include/llvm/Intrinsics.td
    llvm/branches/wendling/eh/include/llvm/IntrinsicsARM.td
    llvm/branches/wendling/eh/include/llvm/IntrinsicsPowerPC.td
    llvm/branches/wendling/eh/include/llvm/IntrinsicsX86.td
    llvm/branches/wendling/eh/include/llvm/LLVMContext.h
    llvm/branches/wendling/eh/include/llvm/LinkAllPasses.h
    llvm/branches/wendling/eh/include/llvm/LinkAllVMCore.h
    llvm/branches/wendling/eh/include/llvm/Linker.h
    llvm/branches/wendling/eh/include/llvm/MC/MCAsmInfo.h
    llvm/branches/wendling/eh/include/llvm/MC/MCAssembler.h
    llvm/branches/wendling/eh/include/llvm/MC/MCCodeEmitter.h
    llvm/branches/wendling/eh/include/llvm/MC/MCContext.h
    llvm/branches/wendling/eh/include/llvm/MC/MCDirectives.h
    llvm/branches/wendling/eh/include/llvm/MC/MCDwarf.h
    llvm/branches/wendling/eh/include/llvm/MC/MCExpr.h
    llvm/branches/wendling/eh/include/llvm/MC/MCInst.h
    llvm/branches/wendling/eh/include/llvm/MC/MCInstPrinter.h
    llvm/branches/wendling/eh/include/llvm/MC/MCObjectStreamer.h
    llvm/branches/wendling/eh/include/llvm/MC/MCObjectWriter.h
    llvm/branches/wendling/eh/include/llvm/MC/MCParser/AsmLexer.h
    llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmLexer.h
    llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmParser.h
    llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCParsedAsmOperand.h
    llvm/branches/wendling/eh/include/llvm/MC/MCSection.h
    llvm/branches/wendling/eh/include/llvm/MC/MCSectionCOFF.h
    llvm/branches/wendling/eh/include/llvm/MC/MCSectionELF.h
    llvm/branches/wendling/eh/include/llvm/MC/MCSectionMachO.h
    llvm/branches/wendling/eh/include/llvm/MC/MCStreamer.h
    llvm/branches/wendling/eh/include/llvm/MC/MachObjectWriter.h
    llvm/branches/wendling/eh/include/llvm/Metadata.h
    llvm/branches/wendling/eh/include/llvm/Operator.h
    llvm/branches/wendling/eh/include/llvm/Pass.h
    llvm/branches/wendling/eh/include/llvm/PassAnalysisSupport.h
    llvm/branches/wendling/eh/include/llvm/PassManager.h
    llvm/branches/wendling/eh/include/llvm/PassManagers.h
    llvm/branches/wendling/eh/include/llvm/PassRegistry.h
    llvm/branches/wendling/eh/include/llvm/PassSupport.h
    llvm/branches/wendling/eh/include/llvm/Support/Allocator.h
    llvm/branches/wendling/eh/include/llvm/Support/COFF.h
    llvm/branches/wendling/eh/include/llvm/Support/CallSite.h
    llvm/branches/wendling/eh/include/llvm/Support/Casting.h
    llvm/branches/wendling/eh/include/llvm/Support/CommandLine.h
    llvm/branches/wendling/eh/include/llvm/Support/Compiler.h
    llvm/branches/wendling/eh/include/llvm/Support/ConstantRange.h
    llvm/branches/wendling/eh/include/llvm/Support/CrashRecoveryContext.h
    llvm/branches/wendling/eh/include/llvm/Support/DataFlow.h
    llvm/branches/wendling/eh/include/llvm/Support/Dwarf.h
    llvm/branches/wendling/eh/include/llvm/Support/ELF.h
    llvm/branches/wendling/eh/include/llvm/Support/ErrorHandling.h
    llvm/branches/wendling/eh/include/llvm/Support/GraphWriter.h
    llvm/branches/wendling/eh/include/llvm/Support/IRReader.h
    llvm/branches/wendling/eh/include/llvm/Support/ManagedStatic.h
    llvm/branches/wendling/eh/include/llvm/Support/MathExtras.h
    llvm/branches/wendling/eh/include/llvm/Support/PassNameParser.h
    llvm/branches/wendling/eh/include/llvm/Support/PatternMatch.h
    llvm/branches/wendling/eh/include/llvm/Support/PrettyStackTrace.h
    llvm/branches/wendling/eh/include/llvm/Support/Regex.h
    llvm/branches/wendling/eh/include/llvm/Support/SourceMgr.h
    llvm/branches/wendling/eh/include/llvm/Support/StandardPasses.h
    llvm/branches/wendling/eh/include/llvm/Support/SystemUtils.h
    llvm/branches/wendling/eh/include/llvm/Support/TypeBuilder.h
    llvm/branches/wendling/eh/include/llvm/Support/raw_ostream.h
    llvm/branches/wendling/eh/include/llvm/System/Memory.h
    llvm/branches/wendling/eh/include/llvm/System/Path.h
    llvm/branches/wendling/eh/include/llvm/System/Process.h
    llvm/branches/wendling/eh/include/llvm/System/Program.h
    llvm/branches/wendling/eh/include/llvm/System/Signals.h
    llvm/branches/wendling/eh/include/llvm/Target/Target.td
    llvm/branches/wendling/eh/include/llvm/Target/TargetAsmBackend.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetAsmParser.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetCallingConv.td
    llvm/branches/wendling/eh/include/llvm/Target/TargetData.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetELFWriterInfo.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetInstrDesc.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetInstrInfo.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetInstrItineraries.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetLowering.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetLoweringObjectFile.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetMachine.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetRegisterInfo.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetSchedule.td
    llvm/branches/wendling/eh/include/llvm/Target/TargetSelect.h
    llvm/branches/wendling/eh/include/llvm/Target/TargetSelectionDAG.td
    llvm/branches/wendling/eh/include/llvm/Target/TargetSelectionDAGInfo.h
    llvm/branches/wendling/eh/include/llvm/Transforms/IPO.h
    llvm/branches/wendling/eh/include/llvm/Transforms/IPO/InlinerPass.h
    llvm/branches/wendling/eh/include/llvm/Transforms/Scalar.h
    llvm/branches/wendling/eh/include/llvm/Transforms/Utils/Cloning.h
    llvm/branches/wendling/eh/include/llvm/Transforms/Utils/Local.h
    llvm/branches/wendling/eh/include/llvm/Transforms/Utils/SSAUpdater.h
    llvm/branches/wendling/eh/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h
    llvm/branches/wendling/eh/include/llvm/Type.h
    llvm/branches/wendling/eh/include/llvm/TypeSymbolTable.h
    llvm/branches/wendling/eh/include/llvm/Value.h
    llvm/branches/wendling/eh/lib/Analysis/AliasAnalysis.cpp
    llvm/branches/wendling/eh/lib/Analysis/AliasAnalysisCounter.cpp
    llvm/branches/wendling/eh/lib/Analysis/AliasAnalysisEvaluator.cpp
    llvm/branches/wendling/eh/lib/Analysis/AliasDebugger.cpp
    llvm/branches/wendling/eh/lib/Analysis/AliasSetTracker.cpp
    llvm/branches/wendling/eh/lib/Analysis/Analysis.cpp
    llvm/branches/wendling/eh/lib/Analysis/BasicAliasAnalysis.cpp
    llvm/branches/wendling/eh/lib/Analysis/CFGPrinter.cpp
    llvm/branches/wendling/eh/lib/Analysis/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Analysis/ConstantFolding.cpp
    llvm/branches/wendling/eh/lib/Analysis/DbgInfoPrinter.cpp
    llvm/branches/wendling/eh/lib/Analysis/DebugInfo.cpp
    llvm/branches/wendling/eh/lib/Analysis/DomPrinter.cpp
    llvm/branches/wendling/eh/lib/Analysis/IPA/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Analysis/IPA/CallGraph.cpp
    llvm/branches/wendling/eh/lib/Analysis/IPA/CallGraphSCCPass.cpp
    llvm/branches/wendling/eh/lib/Analysis/IPA/FindUsedTypes.cpp
    llvm/branches/wendling/eh/lib/Analysis/IPA/GlobalsModRef.cpp
    llvm/branches/wendling/eh/lib/Analysis/IVUsers.cpp
    llvm/branches/wendling/eh/lib/Analysis/InlineCost.cpp
    llvm/branches/wendling/eh/lib/Analysis/InstCount.cpp
    llvm/branches/wendling/eh/lib/Analysis/InstructionSimplify.cpp
    llvm/branches/wendling/eh/lib/Analysis/IntervalPartition.cpp
    llvm/branches/wendling/eh/lib/Analysis/LazyValueInfo.cpp
    llvm/branches/wendling/eh/lib/Analysis/LibCallAliasAnalysis.cpp
    llvm/branches/wendling/eh/lib/Analysis/LibCallSemantics.cpp
    llvm/branches/wendling/eh/lib/Analysis/Lint.cpp
    llvm/branches/wendling/eh/lib/Analysis/LiveValues.cpp
    llvm/branches/wendling/eh/lib/Analysis/Loads.cpp
    llvm/branches/wendling/eh/lib/Analysis/LoopDependenceAnalysis.cpp
    llvm/branches/wendling/eh/lib/Analysis/LoopInfo.cpp
    llvm/branches/wendling/eh/lib/Analysis/LoopPass.cpp
    llvm/branches/wendling/eh/lib/Analysis/MemoryDependenceAnalysis.cpp
    llvm/branches/wendling/eh/lib/Analysis/ModuleDebugInfoPrinter.cpp
    llvm/branches/wendling/eh/lib/Analysis/PostDominators.cpp
    llvm/branches/wendling/eh/lib/Analysis/ProfileEstimatorPass.cpp
    llvm/branches/wendling/eh/lib/Analysis/ProfileInfo.cpp
    llvm/branches/wendling/eh/lib/Analysis/ProfileInfoLoaderPass.cpp
    llvm/branches/wendling/eh/lib/Analysis/ProfileVerifierPass.cpp
    llvm/branches/wendling/eh/lib/Analysis/RegionInfo.cpp
    llvm/branches/wendling/eh/lib/Analysis/RegionPrinter.cpp
    llvm/branches/wendling/eh/lib/Analysis/ScalarEvolution.cpp
    llvm/branches/wendling/eh/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp
    llvm/branches/wendling/eh/lib/Analysis/ScalarEvolutionNormalization.cpp
    llvm/branches/wendling/eh/lib/Analysis/ValueTracking.cpp
    llvm/branches/wendling/eh/lib/AsmParser/LLLexer.cpp
    llvm/branches/wendling/eh/lib/AsmParser/LLLexer.h
    llvm/branches/wendling/eh/lib/AsmParser/LLParser.cpp
    llvm/branches/wendling/eh/lib/AsmParser/LLParser.h
    llvm/branches/wendling/eh/lib/AsmParser/LLToken.h
    llvm/branches/wendling/eh/lib/AsmParser/Parser.cpp
    llvm/branches/wendling/eh/lib/Bitcode/Reader/BitcodeReader.cpp
    llvm/branches/wendling/eh/lib/Bitcode/Reader/BitcodeReader.h
    llvm/branches/wendling/eh/lib/Bitcode/Writer/BitcodeWriter.cpp
    llvm/branches/wendling/eh/lib/Bitcode/Writer/BitcodeWriterPass.cpp
    llvm/branches/wendling/eh/lib/Bitcode/Writer/ValueEnumerator.cpp
    llvm/branches/wendling/eh/lib/Bitcode/Writer/ValueEnumerator.h
    llvm/branches/wendling/eh/lib/CodeGen/AggressiveAntiDepBreaker.cpp
    llvm/branches/wendling/eh/lib/CodeGen/Analysis.cpp
    llvm/branches/wendling/eh/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
    llvm/branches/wendling/eh/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
    llvm/branches/wendling/eh/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
    llvm/branches/wendling/eh/lib/CodeGen/AsmPrinter/CMakeLists.txt
    llvm/branches/wendling/eh/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
    llvm/branches/wendling/eh/lib/CodeGen/AsmPrinter/DwarfDebug.h
    llvm/branches/wendling/eh/lib/CodeGen/BranchFolding.cpp
    llvm/branches/wendling/eh/lib/CodeGen/CMakeLists.txt
    llvm/branches/wendling/eh/lib/CodeGen/CalcSpillWeights.cpp
    llvm/branches/wendling/eh/lib/CodeGen/CodePlacementOpt.cpp
    llvm/branches/wendling/eh/lib/CodeGen/CriticalAntiDepBreaker.cpp
    llvm/branches/wendling/eh/lib/CodeGen/DeadMachineInstructionElim.cpp
    llvm/branches/wendling/eh/lib/CodeGen/DwarfEHPrepare.cpp
    llvm/branches/wendling/eh/lib/CodeGen/ELFWriter.cpp
    llvm/branches/wendling/eh/lib/CodeGen/ELFWriter.h
    llvm/branches/wendling/eh/lib/CodeGen/GCMetadata.cpp
    llvm/branches/wendling/eh/lib/CodeGen/GCStrategy.cpp
    llvm/branches/wendling/eh/lib/CodeGen/IfConversion.cpp
    llvm/branches/wendling/eh/lib/CodeGen/InlineSpiller.cpp
    llvm/branches/wendling/eh/lib/CodeGen/IntrinsicLowering.cpp
    llvm/branches/wendling/eh/lib/CodeGen/LLVMTargetMachine.cpp
    llvm/branches/wendling/eh/lib/CodeGen/LiveInterval.cpp
    llvm/branches/wendling/eh/lib/CodeGen/LiveIntervalAnalysis.cpp
    llvm/branches/wendling/eh/lib/CodeGen/LiveStackAnalysis.cpp
    llvm/branches/wendling/eh/lib/CodeGen/LiveVariables.cpp
    llvm/branches/wendling/eh/lib/CodeGen/LowerSubregs.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineBasicBlock.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineCSE.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineDominators.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineFunction.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineFunctionAnalysis.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineFunctionPrinterPass.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineInstr.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineLICM.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineLoopInfo.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineModuleInfo.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineSink.cpp
    llvm/branches/wendling/eh/lib/CodeGen/MachineVerifier.cpp
    llvm/branches/wendling/eh/lib/CodeGen/OptimizePHIs.cpp
    llvm/branches/wendling/eh/lib/CodeGen/PHIElimination.cpp
    llvm/branches/wendling/eh/lib/CodeGen/PHIElimination.h
    llvm/branches/wendling/eh/lib/CodeGen/PostRAHazardRecognizer.cpp
    llvm/branches/wendling/eh/lib/CodeGen/PostRASchedulerList.cpp
    llvm/branches/wendling/eh/lib/CodeGen/PreAllocSplitting.cpp
    llvm/branches/wendling/eh/lib/CodeGen/ProcessImplicitDefs.cpp
    llvm/branches/wendling/eh/lib/CodeGen/PrologEpilogInserter.cpp
    llvm/branches/wendling/eh/lib/CodeGen/PrologEpilogInserter.h
    llvm/branches/wendling/eh/lib/CodeGen/RegAllocFast.cpp
    llvm/branches/wendling/eh/lib/CodeGen/RegAllocLinearScan.cpp
    llvm/branches/wendling/eh/lib/CodeGen/RegAllocPBQP.cpp
    llvm/branches/wendling/eh/lib/CodeGen/RegisterCoalescer.cpp
    llvm/branches/wendling/eh/lib/CodeGen/RegisterScavenging.cpp
    llvm/branches/wendling/eh/lib/CodeGen/RenderMachineFunction.cpp
    llvm/branches/wendling/eh/lib/CodeGen/RenderMachineFunction.h
    llvm/branches/wendling/eh/lib/CodeGen/ScheduleDAGInstrs.cpp
    llvm/branches/wendling/eh/lib/CodeGen/ScheduleDAGInstrs.h
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/CMakeLists.txt
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/FastISel.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/LegalizeTypes.h
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.h
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/SelectionDAGPrinter.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SelectionDAG/TargetLowering.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SimpleRegisterCoalescing.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SimpleRegisterCoalescing.h
    llvm/branches/wendling/eh/lib/CodeGen/SjLjEHPrepare.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SlotIndexes.cpp
    llvm/branches/wendling/eh/lib/CodeGen/Spiller.cpp
    llvm/branches/wendling/eh/lib/CodeGen/Spiller.h
    llvm/branches/wendling/eh/lib/CodeGen/SplitKit.cpp
    llvm/branches/wendling/eh/lib/CodeGen/SplitKit.h
    llvm/branches/wendling/eh/lib/CodeGen/Splitter.cpp
    llvm/branches/wendling/eh/lib/CodeGen/Splitter.h
    llvm/branches/wendling/eh/lib/CodeGen/StackProtector.cpp
    llvm/branches/wendling/eh/lib/CodeGen/StackSlotColoring.cpp
    llvm/branches/wendling/eh/lib/CodeGen/StrongPHIElimination.cpp
    llvm/branches/wendling/eh/lib/CodeGen/TailDuplication.cpp
    llvm/branches/wendling/eh/lib/CodeGen/TargetInstrInfoImpl.cpp
    llvm/branches/wendling/eh/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
    llvm/branches/wendling/eh/lib/CodeGen/TwoAddressInstructionPass.cpp
    llvm/branches/wendling/eh/lib/CodeGen/UnreachableBlockElim.cpp
    llvm/branches/wendling/eh/lib/CodeGen/VirtRegMap.cpp
    llvm/branches/wendling/eh/lib/CodeGen/VirtRegMap.h
    llvm/branches/wendling/eh/lib/CodeGen/VirtRegRewriter.cpp
    llvm/branches/wendling/eh/lib/CompilerDriver/BuiltinOptions.cpp
    llvm/branches/wendling/eh/lib/CompilerDriver/CompilationGraph.cpp
    llvm/branches/wendling/eh/lib/CompilerDriver/Main.cpp
    llvm/branches/wendling/eh/lib/CompilerDriver/Makefile
    llvm/branches/wendling/eh/lib/ExecutionEngine/ExecutionEngine.cpp
    llvm/branches/wendling/eh/lib/ExecutionEngine/JIT/Intercept.cpp
    llvm/branches/wendling/eh/lib/ExecutionEngine/JIT/JIT.cpp
    llvm/branches/wendling/eh/lib/ExecutionEngine/JIT/JITDebugRegisterer.cpp
    llvm/branches/wendling/eh/lib/ExecutionEngine/JIT/JITEmitter.cpp
    llvm/branches/wendling/eh/lib/Linker/LinkModules.cpp
    llvm/branches/wendling/eh/lib/MC/CMakeLists.txt
    llvm/branches/wendling/eh/lib/MC/MCAsmInfo.cpp
    llvm/branches/wendling/eh/lib/MC/MCAsmInfoDarwin.cpp
    llvm/branches/wendling/eh/lib/MC/MCAsmStreamer.cpp
    llvm/branches/wendling/eh/lib/MC/MCAssembler.cpp
    llvm/branches/wendling/eh/lib/MC/MCContext.cpp
    llvm/branches/wendling/eh/lib/MC/MCDisassembler/EDInst.cpp
    llvm/branches/wendling/eh/lib/MC/MCDisassembler/EDOperand.cpp
    llvm/branches/wendling/eh/lib/MC/MCDwarf.cpp
    llvm/branches/wendling/eh/lib/MC/MCExpr.cpp
    llvm/branches/wendling/eh/lib/MC/MCLoggingStreamer.cpp
    llvm/branches/wendling/eh/lib/MC/MCMachOStreamer.cpp
    llvm/branches/wendling/eh/lib/MC/MCNullStreamer.cpp
    llvm/branches/wendling/eh/lib/MC/MCObjectStreamer.cpp
    llvm/branches/wendling/eh/lib/MC/MCObjectWriter.cpp
    llvm/branches/wendling/eh/lib/MC/MCParser/AsmLexer.cpp
    llvm/branches/wendling/eh/lib/MC/MCParser/AsmParser.cpp
    llvm/branches/wendling/eh/lib/MC/MCParser/CMakeLists.txt
    llvm/branches/wendling/eh/lib/MC/MCParser/DarwinAsmParser.cpp
    llvm/branches/wendling/eh/lib/MC/MCParser/ELFAsmParser.cpp
    llvm/branches/wendling/eh/lib/MC/MCParser/MCAsmParser.cpp
    llvm/branches/wendling/eh/lib/MC/MCSectionCOFF.cpp
    llvm/branches/wendling/eh/lib/MC/MCSectionELF.cpp
    llvm/branches/wendling/eh/lib/MC/MCSectionMachO.cpp
    llvm/branches/wendling/eh/lib/MC/MCStreamer.cpp
    llvm/branches/wendling/eh/lib/MC/MachObjectWriter.cpp
    llvm/branches/wendling/eh/lib/MC/TargetAsmBackend.cpp
    llvm/branches/wendling/eh/lib/MC/WinCOFFObjectWriter.cpp
    llvm/branches/wendling/eh/lib/MC/WinCOFFStreamer.cpp
    llvm/branches/wendling/eh/lib/Support/APFloat.cpp
    llvm/branches/wendling/eh/lib/Support/APInt.cpp
    llvm/branches/wendling/eh/lib/Support/Allocator.cpp
    llvm/branches/wendling/eh/lib/Support/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Support/ConstantRange.cpp
    llvm/branches/wendling/eh/lib/Support/CrashRecoveryContext.cpp
    llvm/branches/wendling/eh/lib/Support/ErrorHandling.cpp
    llvm/branches/wendling/eh/lib/Support/FoldingSet.cpp
    llvm/branches/wendling/eh/lib/Support/GraphWriter.cpp
    llvm/branches/wendling/eh/lib/Support/PrettyStackTrace.cpp
    llvm/branches/wendling/eh/lib/Support/SmallVector.cpp
    llvm/branches/wendling/eh/lib/Support/SourceMgr.cpp
    llvm/branches/wendling/eh/lib/Support/Statistic.cpp
    llvm/branches/wendling/eh/lib/Support/StringRef.cpp
    llvm/branches/wendling/eh/lib/Support/SystemUtils.cpp
    llvm/branches/wendling/eh/lib/Support/Triple.cpp
    llvm/branches/wendling/eh/lib/Support/raw_ostream.cpp
    llvm/branches/wendling/eh/lib/System/CMakeLists.txt
    llvm/branches/wendling/eh/lib/System/DynamicLibrary.cpp
    llvm/branches/wendling/eh/lib/System/Host.cpp
    llvm/branches/wendling/eh/lib/System/Path.cpp
    llvm/branches/wendling/eh/lib/System/RWMutex.cpp
    llvm/branches/wendling/eh/lib/System/SearchForAddressOfSpecialSymbol.cpp
    llvm/branches/wendling/eh/lib/System/ThreadLocal.cpp
    llvm/branches/wendling/eh/lib/System/Unix/Path.inc
    llvm/branches/wendling/eh/lib/System/Unix/Program.inc
    llvm/branches/wendling/eh/lib/System/Unix/Signals.inc
    llvm/branches/wendling/eh/lib/System/Win32/Path.inc
    llvm/branches/wendling/eh/lib/System/Win32/Program.inc
    llvm/branches/wendling/eh/lib/System/Win32/Signals.inc
    llvm/branches/wendling/eh/lib/System/Win32/ThreadLocal.inc
    llvm/branches/wendling/eh/lib/Target/ARM/ARM.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARM.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMAddressingModes.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMAsmPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMBaseInstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMBaseInstrInfo.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMBaseRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMBaseRegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMBuildAttrs.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMCallingConv.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMCodeEmitter.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMConstantIslandPass.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMConstantPoolValue.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMExpandPseudoInsts.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMFastISel.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMGlobalMerge.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMISelLowering.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMInstrFormats.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMInstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMInstrInfo.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMInstrNEON.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMInstrThumb.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMInstrThumb2.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMInstrVFP.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMJITInfo.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMLoadStoreOptimizer.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMMCInstLower.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMMCInstLower.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMMachineFunctionInfo.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMPerfectShuffle.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMRegisterInfo.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMSchedule.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMScheduleA8.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMScheduleA9.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMScheduleV6.td
    llvm/branches/wendling/eh/lib/Target/ARM/ARMSelectionDAGInfo.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMSelectionDAGInfo.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMSubtarget.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMSubtarget.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMTargetMachine.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMTargetMachine.h
    llvm/branches/wendling/eh/lib/Target/ARM/ARMTargetObjectFile.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/ARMTargetObjectFile.h
    llvm/branches/wendling/eh/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h
    llvm/branches/wendling/eh/lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h
    llvm/branches/wendling/eh/lib/Target/ARM/Makefile
    llvm/branches/wendling/eh/lib/Target/ARM/NEONMoveFix.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/Thumb1InstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/Thumb1InstrInfo.h
    llvm/branches/wendling/eh/lib/Target/ARM/Thumb1RegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/Thumb1RegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/ARM/Thumb2HazardRecognizer.h
    llvm/branches/wendling/eh/lib/Target/ARM/Thumb2ITBlockPass.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/Thumb2InstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/ARM/Thumb2InstrInfo.h
    llvm/branches/wendling/eh/lib/Target/ARM/Thumb2SizeReduction.cpp
    llvm/branches/wendling/eh/lib/Target/Alpha/AlphaBranchSelector.cpp
    llvm/branches/wendling/eh/lib/Target/Alpha/AlphaCodeEmitter.cpp
    llvm/branches/wendling/eh/lib/Target/Alpha/AlphaISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/Alpha/AlphaISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/Alpha/AlphaLLRP.cpp
    llvm/branches/wendling/eh/lib/Target/Alpha/AlphaRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/Alpha/AlphaRegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/Alpha/AlphaSchedule.td
    llvm/branches/wendling/eh/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/Alpha/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/Blackfin/BlackfinISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/Blackfin/BlackfinISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/Blackfin/BlackfinRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/Blackfin/BlackfinRegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/CBackend/CBackend.cpp
    llvm/branches/wendling/eh/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/CellSPU/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPU64InstrInfo.td
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPUCallingConv.td
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPUISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPUISelLowering.h
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPUInstrInfo.td
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPUOperands.td
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPURegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPURegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPURegisterInfo.td
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPUSchedule.td
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPUSubtarget.h
    llvm/branches/wendling/eh/lib/Target/CellSPU/SPUTargetMachine.h
    llvm/branches/wendling/eh/lib/Target/CppBackend/CPPBackend.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlaze.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlaze.td
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeCallingConv.td
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeISelLowering.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeInstrFPU.td
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeInstrFSL.td
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeInstrFormats.td
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeInstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeInstrInfo.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeInstrInfo.td
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeIntrinsics.td
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeRegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeRegisterInfo.td
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeSchedule.td
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeTargetMachine.cpp
    llvm/branches/wendling/eh/lib/Target/MBlaze/MBlazeTargetMachine.h
    llvm/branches/wendling/eh/lib/Target/MBlaze/Makefile
    llvm/branches/wendling/eh/lib/Target/MBlaze/TargetInfo/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/MSP430/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430.td
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430BranchSelector.cpp
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430ISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430ISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430InstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430RegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/MSP430/MSP430RegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/MSP430/Makefile
    llvm/branches/wendling/eh/lib/Target/MSP430/TargetInfo/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/Mangler.cpp
    llvm/branches/wendling/eh/lib/Target/Mips/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/Mips/Mips.td
    llvm/branches/wendling/eh/lib/Target/Mips/MipsCallingConv.td
    llvm/branches/wendling/eh/lib/Target/Mips/MipsDelaySlotFiller.cpp
    llvm/branches/wendling/eh/lib/Target/Mips/MipsISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/Mips/MipsISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/Mips/MipsInstrFPU.td
    llvm/branches/wendling/eh/lib/Target/Mips/MipsInstrFormats.td
    llvm/branches/wendling/eh/lib/Target/Mips/MipsInstrInfo.td
    llvm/branches/wendling/eh/lib/Target/Mips/MipsMachineFunction.h
    llvm/branches/wendling/eh/lib/Target/Mips/MipsRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/Mips/MipsRegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/Mips/MipsRegisterInfo.td
    llvm/branches/wendling/eh/lib/Target/Mips/MipsSchedule.td
    llvm/branches/wendling/eh/lib/Target/Mips/MipsTargetObjectFile.cpp
    llvm/branches/wendling/eh/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/PowerPC/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCBranchSelector.cpp
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCCallingConv.td
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCCodeEmitter.cpp
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCInstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCRegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCScheduleG3.td
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCScheduleG4.td
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCScheduleG4Plus.td
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCScheduleG5.td
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCSubtarget.cpp
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCSubtarget.h
    llvm/branches/wendling/eh/lib/Target/PowerPC/PPCTargetMachine.h
    llvm/branches/wendling/eh/lib/Target/PowerPC/README.txt
    llvm/branches/wendling/eh/lib/Target/README.txt
    llvm/branches/wendling/eh/lib/Target/Sparc/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/Sparc/DelaySlotFiller.cpp
    llvm/branches/wendling/eh/lib/Target/Sparc/FPMover.cpp
    llvm/branches/wendling/eh/lib/Target/Sparc/Sparc.td
    llvm/branches/wendling/eh/lib/Target/Sparc/SparcISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/Sparc/SparcISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/Sparc/SparcInstrInfo.td
    llvm/branches/wendling/eh/lib/Target/Sparc/SparcRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/Sparc/SparcRegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/SystemZ/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/SystemZ/SystemZISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/SystemZ/SystemZInstrBuilder.h
    llvm/branches/wendling/eh/lib/Target/SystemZ/SystemZRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/SystemZ/SystemZRegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/Target.cpp
    llvm/branches/wendling/eh/lib/Target/TargetData.cpp
    llvm/branches/wendling/eh/lib/Target/TargetELFWriterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/TargetInstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/TargetLoweringObjectFile.cpp
    llvm/branches/wendling/eh/lib/Target/TargetRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/X86/AsmParser/X86AsmLexer.cpp
    llvm/branches/wendling/eh/lib/Target/X86/AsmParser/X86AsmParser.cpp
    llvm/branches/wendling/eh/lib/Target/X86/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/X86/Disassembler/X86Disassembler.cpp
    llvm/branches/wendling/eh/lib/Target/X86/Disassembler/X86Disassembler.h
    llvm/branches/wendling/eh/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c
    llvm/branches/wendling/eh/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h
    llvm/branches/wendling/eh/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h
    llvm/branches/wendling/eh/lib/Target/X86/Makefile
    llvm/branches/wendling/eh/lib/Target/X86/README-SSE.txt
    llvm/branches/wendling/eh/lib/Target/X86/README.txt
    llvm/branches/wendling/eh/lib/Target/X86/SSEDomainFix.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86.td
    llvm/branches/wendling/eh/lib/Target/X86/X86AsmBackend.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86AsmPrinter.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86CallingConv.td
    llvm/branches/wendling/eh/lib/Target/X86/X86CodeEmitter.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86ELFWriterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86ELFWriterInfo.h
    llvm/branches/wendling/eh/lib/Target/X86/X86FastISel.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86FixupKinds.h
    llvm/branches/wendling/eh/lib/Target/X86/X86FloatingPoint.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86ISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86ISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86ISelLowering.h
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrBuilder.h
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrFPStack.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrFormats.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrFragmentsSIMD.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrInfo.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrInfo.h
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrInfo.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrMMX.td
    llvm/branches/wendling/eh/lib/Target/X86/X86InstrSSE.td
    llvm/branches/wendling/eh/lib/Target/X86/X86JITInfo.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86MCAsmInfo.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86MCCodeEmitter.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86MCInstLower.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86RegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86RegisterInfo.h
    llvm/branches/wendling/eh/lib/Target/X86/X86RegisterInfo.td
    llvm/branches/wendling/eh/lib/Target/X86/X86SelectionDAGInfo.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86SelectionDAGInfo.h
    llvm/branches/wendling/eh/lib/Target/X86/X86Subtarget.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86Subtarget.h
    llvm/branches/wendling/eh/lib/Target/X86/X86TargetMachine.cpp
    llvm/branches/wendling/eh/lib/Target/X86/X86TargetMachine.h
    llvm/branches/wendling/eh/lib/Target/XCore/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/XCore/TargetInfo/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Target/XCore/XCoreISelDAGToDAG.cpp
    llvm/branches/wendling/eh/lib/Target/XCore/XCoreISelLowering.cpp
    llvm/branches/wendling/eh/lib/Target/XCore/XCoreInstrInfo.td
    llvm/branches/wendling/eh/lib/Target/XCore/XCoreRegisterInfo.cpp
    llvm/branches/wendling/eh/lib/Target/XCore/XCoreRegisterInfo.h
    llvm/branches/wendling/eh/lib/Transforms/Hello/Hello.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/ArgumentPromotion.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Transforms/IPO/ConstantMerge.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/DeadArgumentElimination.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/DeadTypeElimination.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/ExtractGV.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/FunctionAttrs.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/GlobalDCE.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/GlobalOpt.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/IPConstantPropagation.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/IPO.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/InlineAlways.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/InlineSimple.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/Inliner.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/Internalize.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/LoopExtractor.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/LowerSetJmp.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/MergeFunctions.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/PartialInlining.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/PartialSpecialization.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/PruneEH.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/StripDeadPrototypes.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/StripSymbols.cpp
    llvm/branches/wendling/eh/lib/Transforms/IPO/StructRetPromotion.cpp
    llvm/branches/wendling/eh/lib/Transforms/InstCombine/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Transforms/InstCombine/InstCombine.h
    llvm/branches/wendling/eh/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
    llvm/branches/wendling/eh/lib/Transforms/InstCombine/InstCombineCalls.cpp
    llvm/branches/wendling/eh/lib/Transforms/InstCombine/InstCombineCasts.cpp
    llvm/branches/wendling/eh/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
    llvm/branches/wendling/eh/lib/Transforms/InstCombine/InstCombineShifts.cpp
    llvm/branches/wendling/eh/lib/Transforms/InstCombine/InstructionCombining.cpp
    llvm/branches/wendling/eh/lib/Transforms/Instrumentation/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Transforms/Instrumentation/EdgeProfiling.cpp
    llvm/branches/wendling/eh/lib/Transforms/Instrumentation/OptimalEdgeProfiling.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/ADCE.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/BasicBlockPlacement.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Transforms/Scalar/CodeGenPrepare.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/ConstantProp.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/DCE.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/DeadStoreElimination.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/GEPSplitter.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/GVN.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/IndVarSimplify.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/JumpThreading.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/LICM.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/LoopDeletion.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/LoopRotation.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/LoopStrengthReduce.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/LoopUnrollPass.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/LoopUnswitch.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/MemCpyOptimizer.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/Reassociate.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/Reg2Mem.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/SCCP.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/Scalar.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/ScalarReplAggregates.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/SimplifyCFGPass.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/SimplifyHalfPowrLibCalls.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/SimplifyLibCalls.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/Sink.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/TailDuplication.cpp
    llvm/branches/wendling/eh/lib/Transforms/Scalar/TailRecursionElimination.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/AddrModeMatcher.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/BasicBlockUtils.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/BreakCriticalEdges.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/CMakeLists.txt
    llvm/branches/wendling/eh/lib/Transforms/Utils/CloneFunction.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/CloneLoop.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/CloneModule.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/CodeExtractor.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/InlineFunction.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/InstructionNamer.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/LCSSA.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/Local.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/LoopSimplify.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/LoopUnroll.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/LowerInvoke.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/LowerSwitch.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/Mem2Reg.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/SSAUpdater.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/SimplifyCFG.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp
    llvm/branches/wendling/eh/lib/Transforms/Utils/ValueMapper.cpp
    llvm/branches/wendling/eh/lib/VMCore/AsmWriter.cpp
    llvm/branches/wendling/eh/lib/VMCore/Attributes.cpp
    llvm/branches/wendling/eh/lib/VMCore/AutoUpgrade.cpp
    llvm/branches/wendling/eh/lib/VMCore/CMakeLists.txt
    llvm/branches/wendling/eh/lib/VMCore/ConstantFold.cpp
    llvm/branches/wendling/eh/lib/VMCore/Constants.cpp
    llvm/branches/wendling/eh/lib/VMCore/ConstantsContext.h
    llvm/branches/wendling/eh/lib/VMCore/Core.cpp
    llvm/branches/wendling/eh/lib/VMCore/Dominators.cpp
    llvm/branches/wendling/eh/lib/VMCore/InlineAsm.cpp
    llvm/branches/wendling/eh/lib/VMCore/Instructions.cpp
    llvm/branches/wendling/eh/lib/VMCore/LLVMContext.cpp
    llvm/branches/wendling/eh/lib/VMCore/LLVMContextImpl.cpp
    llvm/branches/wendling/eh/lib/VMCore/LLVMContextImpl.h
    llvm/branches/wendling/eh/lib/VMCore/Metadata.cpp
    llvm/branches/wendling/eh/lib/VMCore/Module.cpp
    llvm/branches/wendling/eh/lib/VMCore/Pass.cpp
    llvm/branches/wendling/eh/lib/VMCore/PassManager.cpp
    llvm/branches/wendling/eh/lib/VMCore/PassRegistry.cpp
    llvm/branches/wendling/eh/lib/VMCore/PrintModulePass.cpp
    llvm/branches/wendling/eh/lib/VMCore/Type.cpp
    llvm/branches/wendling/eh/lib/VMCore/TypesContext.h
    llvm/branches/wendling/eh/lib/VMCore/ValueTypes.cpp
    llvm/branches/wendling/eh/lib/VMCore/Verifier.cpp
    llvm/branches/wendling/eh/projects/Makefile
    llvm/branches/wendling/eh/runtime/libprofile/Makefile
    llvm/branches/wendling/eh/test/   (props changed)
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2003-02-26-AccessSizeTest.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2003-04-22-GEPProblem.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2003-05-21-GEP-Problem.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2003-09-19-LocalArgument.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2003-11-04-SimpleCases.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2003-12-11-ConstExprGEP.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2004-07-28-MustAliasbug.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2004-12-08-BasicAACrash.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2004-12-08-BasicAACrash2.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2006-03-03-BadArraySubscript.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2006-11-03-BasicAAVectorCrash.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2007-11-05-SizeCrash.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2007-12-08-OutOfBoundsCrash.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2008-06-02-GEPTailCrash.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2008-11-23-NoaliasRet.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2009-10-13-AtomicModRef.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/2009-10-13-GEP-BaseNoAlias.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/args-rets-allocas-loads.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/byval.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/constant-over-index.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/empty.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/featuretest.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/gep-alias.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/modref.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/phi-and-select.ll
    llvm/branches/wendling/eh/test/Analysis/BasicAA/unreachable-block.ll
    llvm/branches/wendling/eh/test/Analysis/GlobalsModRef/aliastest.ll
    llvm/branches/wendling/eh/test/Analysis/GlobalsModRef/chaining-analysis.ll
    llvm/branches/wendling/eh/test/Analysis/GlobalsModRef/indirect-global.ll
    llvm/branches/wendling/eh/test/Analysis/GlobalsModRef/modreftest.ll
    llvm/branches/wendling/eh/test/Analysis/LoopDependenceAnalysis/alias.ll
    llvm/branches/wendling/eh/test/Analysis/LoopDependenceAnalysis/siv-strong.ll
    llvm/branches/wendling/eh/test/Analysis/LoopDependenceAnalysis/siv-weak-crossing.ll
    llvm/branches/wendling/eh/test/Analysis/LoopDependenceAnalysis/siv-weak-zero.ll
    llvm/branches/wendling/eh/test/Analysis/LoopDependenceAnalysis/ziv.ll
    llvm/branches/wendling/eh/test/Analysis/ScalarEvolution/avoid-smax-1.ll
    llvm/branches/wendling/eh/test/Analysis/ScalarEvolution/max-trip-count.ll
    llvm/branches/wendling/eh/test/Archive/README.txt
    llvm/branches/wendling/eh/test/Assembler/AutoUpgradeIntrinsics.ll
    llvm/branches/wendling/eh/test/Assembler/getelementptr.ll
    llvm/branches/wendling/eh/test/Bindings/Ocaml/analysis.ml
    llvm/branches/wendling/eh/test/Bindings/Ocaml/bitreader.ml
    llvm/branches/wendling/eh/test/Bindings/Ocaml/bitwriter.ml
    llvm/branches/wendling/eh/test/Bindings/Ocaml/executionengine.ml
    llvm/branches/wendling/eh/test/Bindings/Ocaml/scalar_opts.ml
    llvm/branches/wendling/eh/test/Bindings/Ocaml/target.ml
    llvm/branches/wendling/eh/test/Bindings/Ocaml/vmcore.ml
    llvm/branches/wendling/eh/test/Bitcode/ssse3_palignr.ll.bc
    llvm/branches/wendling/eh/test/BugPoint/crash-narrowfunctiontest.ll
    llvm/branches/wendling/eh/test/BugPoint/remove_arguments_test.ll
    llvm/branches/wendling/eh/test/CMakeLists.txt
    llvm/branches/wendling/eh/test/CodeGen/ARM/   (props changed)
    llvm/branches/wendling/eh/test/CodeGen/ARM/2007-01-19-InfiniteLoop.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2007-03-26-RegScavengerAssert.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2007-05-31-RegScavengerInfiniteLoop.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2009-09-28-LdStOptiBug.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2009-12-02-vtrn-undef.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-05-20-NEONSpillCrash.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-05-21-BuildVector.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-06-11-vmovdrr-bitcast.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-06-21-nondarwin-tc.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/2010-06-29-PartialRedefFastAlloc.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/align.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/arguments.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/bfi.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/bits.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/call-tc.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/clz.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/constants.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/div.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/fast-isel.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/fmscs.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/fnmuls.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/fp.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/fpconsts.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/fpowi.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/inlineasm3.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/ispositive.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/long.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/long_shift.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/lsr-code-insertion.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/lsr-on-unrolled-loops.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/mul_const.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/pack.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/reg_sequence.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/rev.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/select-imm.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/select.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/spill-q.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/stm.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/str_pre-2.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/t2-imm.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/unaligned_load_store.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vaba.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vabd.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vadd.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vcgt.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vext.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vget_lane.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vld1.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vld2.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vld3.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vld4.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vldlane.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vmla.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vmls.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vmov.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vmul.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vrev.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vst1.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vst2.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vst3.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vst4.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vstlane.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vsub.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vtrn.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vuzp.ll
    llvm/branches/wendling/eh/test/CodeGen/ARM/vzip.ll
    llvm/branches/wendling/eh/test/CodeGen/CellSPU/bigstack.ll
    llvm/branches/wendling/eh/test/CodeGen/CellSPU/call.ll
    llvm/branches/wendling/eh/test/CodeGen/CellSPU/sext128.ll
    llvm/branches/wendling/eh/test/CodeGen/CellSPU/shuffles.ll
    llvm/branches/wendling/eh/test/CodeGen/MBlaze/brind.ll
    llvm/branches/wendling/eh/test/CodeGen/MBlaze/cc.ll
    llvm/branches/wendling/eh/test/CodeGen/MBlaze/fpu.ll
    llvm/branches/wendling/eh/test/CodeGen/MBlaze/imm.ll
    llvm/branches/wendling/eh/test/CodeGen/MBlaze/jumptable.ll
    llvm/branches/wendling/eh/test/CodeGen/MBlaze/mul.ll
    llvm/branches/wendling/eh/test/CodeGen/MBlaze/shift.ll
    llvm/branches/wendling/eh/test/CodeGen/MSP430/Inst16mm.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-06-05-Carry.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-03-SRet.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-05-ByVal.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-06-fadd64.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-07-FPExtend.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-07-Float2Int.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-07-IntDoubleConvertions.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-15-InternalConstant.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-15-SmallSection.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-16-SignExtInReg.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-22-Cstpool.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-23-fpcmp.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-29-icmp.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-07-31-fcopysign.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-08-01-AsmInline.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-08-03-fabs64.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-08-04-Bitconvert.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-08-06-Alloca.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-08-07-CC.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-08-07-FPRound.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2008-08-08-ctlz.ll
    llvm/branches/wendling/eh/test/CodeGen/Mips/2010-07-20-Select.ll
    llvm/branches/wendling/eh/test/CodeGen/PowerPC/align.ll
    llvm/branches/wendling/eh/test/CodeGen/PowerPC/vec_constants.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/05-MemLoadsStores.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/05-MemLoadsStores16.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/07-BrUnCond.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/09-DynamicAlloca.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/09-Globals.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/10-FuncsPic.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/10-GlobalsPic.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/11-BSwap.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/2009-06-02-Rotate.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/2009-07-04-Shl32.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/2009-07-05-Shifts.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/2009-07-10-BadIncomingArgOffset.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/2009-07-11-FloatBitConvert.ll
    llvm/branches/wendling/eh/test/CodeGen/SystemZ/2009-07-11-InvalidRIISel.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb/2007-05-05-InvalidPushPop.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb/dyn-stackalloc.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb/large-stack.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb/vargs.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/2009-10-15-ITBlockBranch.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/2010-04-15-DynAllocBug.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/2010-06-14-NEONCoalescer.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/2010-06-21-TailMergeBug.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/crash.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/cross-rc-coalescing-2.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/div.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/large-stack.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/ldr-str-imm12.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/lsr-deficiency.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/machine-licm.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/thumb2-call-tc.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/thumb2-cmp.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/thumb2-ifcvt1-tc.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/thumb2-pack.ll
    llvm/branches/wendling/eh/test/CodeGen/Thumb2/thumb2-spill-q.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2007-04-25-MMX-PADDQ.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2007-05-15-maskmovq.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2007-06-15-IntToMMX.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2007-07-03-GR64ToVR64.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2008-02-18-TailMergingBug.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2008-04-08-CoalescerCrash.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2008-06-13-VolatileLoadStore.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2008-08-23-64Bit-maskmovq.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2008-09-05-sinttofp-2xi32.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2008-10-27-CoalescerBug.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2009-02-26-MachineLICMBug.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2009-03-13-PHIElimBug.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2009-03-23-MultiUseSched.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2009-06-05-ScalarToVectorByteMMX.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2009-08-02-mmx-scalar-to-vector.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-04-23-mmx-movdq2q.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/2010-04-30-LocalAlloc-LandingPad.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/3addr-or.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/GC/dg.exp
    llvm/branches/wendling/eh/test/CodeGen/X86/abi-isel.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/atomic_op.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/byval.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/call-imm.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/compare-inf.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/constant-pool-remat-0.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/critical-edge-split.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/dll-linkage.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/dllexport.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/dollar-name.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/dyn-stackalloc.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/fast-isel-bc.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/fast-isel-mem.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/ghc-cc.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/global-sections.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/legalizedag_vec.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/licm-nested.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/loop-strength-reduce4.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/lsr-reuse.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/lsr-wrap.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/memcmp.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/memmove-0.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/memmove-1.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/memmove-3.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/memset-2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mingw-alloca.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-arg-passing.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-arg-passing2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-arith.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-bitcast-to-i64.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-insert-element.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-pinsrw.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-punpckhdq.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-shift.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-shuffle.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-vzmovl-2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/mmx-vzmovl.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/movgs.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/phi-immediate-factoring.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/phys_subreg_coalesce-2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/pic.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/postra-licm.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/pr2659.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/pr3522.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/shift-folding.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/sibcall-3.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/sibcall.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/sink-hoist.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/sse2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/sse3.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/sse41.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/stdcall.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/store-narrow.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/store_op_load_fold2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/tail-opts.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/tailcall-fastisel.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/tailcall-stackalign.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/tailcallfp2.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/tls9.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/twoaddr-coalesce.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/unaligned-load.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/v2f32.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_cast.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_insert-5.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_insert-6.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_insert-7.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_insert-9.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_set-F.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-19.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-20.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_shuffle-24.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/vec_zero_cse.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/widen_select-1.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/widen_shuffle-1.ll
    llvm/branches/wendling/eh/test/CodeGen/X86/zero-remat.ll
    llvm/branches/wendling/eh/test/CodeGen/XCore/ashr.ll
    llvm/branches/wendling/eh/test/DebugInfo/2009-10-16-Scope.ll
    llvm/branches/wendling/eh/test/DebugInfo/2010-05-10-MultipleCU.ll
    llvm/branches/wendling/eh/test/DebugInfo/printdbginfo2.ll
    llvm/branches/wendling/eh/test/Feature/linker_private_linkages.ll
    llvm/branches/wendling/eh/test/Feature/metadata.ll
    llvm/branches/wendling/eh/test/FrontendC++/2010-04-30-OptimizedMethod-Dbg.cpp
    llvm/branches/wendling/eh/test/FrontendC/2007-10-01-BuildArrayRef.c
    llvm/branches/wendling/eh/test/FrontendC/2008-03-24-BitField-And-Alloca.c
    llvm/branches/wendling/eh/test/FrontendC/2010-05-18-asmsched.c
    llvm/branches/wendling/eh/test/FrontendC/2010-07-14-overconservative-align.c
    llvm/branches/wendling/eh/test/FrontendC/2010-07-14-ref-off-end.c
    llvm/branches/wendling/eh/test/FrontendC/cstring-align.c
    llvm/branches/wendling/eh/test/LLVMC/AppendCmdHook.td
    llvm/branches/wendling/eh/test/LLVMC/C++/dg.exp
    llvm/branches/wendling/eh/test/LLVMC/C/emit-llvm.c
    llvm/branches/wendling/eh/test/LLVMC/EmptyCompilationGraph.td
    llvm/branches/wendling/eh/test/LLVMC/EnvParentheses.td
    llvm/branches/wendling/eh/test/LLVMC/ForwardAs.td
    llvm/branches/wendling/eh/test/LLVMC/ForwardTransformedValue.td
    llvm/branches/wendling/eh/test/LLVMC/ForwardValue.td
    llvm/branches/wendling/eh/test/LLVMC/HookWithArguments.td
    llvm/branches/wendling/eh/test/LLVMC/HookWithInFile.td
    llvm/branches/wendling/eh/test/LLVMC/Init.td
    llvm/branches/wendling/eh/test/LLVMC/MultiValuedOption.td
    llvm/branches/wendling/eh/test/LLVMC/MultipleCompilationGraphs.td
    llvm/branches/wendling/eh/test/LLVMC/NoActions.td
    llvm/branches/wendling/eh/test/LLVMC/NoCompilationGraph.td
    llvm/branches/wendling/eh/test/LLVMC/OneOrMore.td
    llvm/branches/wendling/eh/test/LLVMC/OptionPreprocessor.td
    llvm/branches/wendling/eh/test/LLVMC/OutputSuffixHook.td
    llvm/branches/wendling/eh/test/LLVMC/TestWarnings.td
    llvm/branches/wendling/eh/test/MC/AsmParser/dg.exp
    llvm/branches/wendling/eh/test/MC/AsmParser/directive_abort.s
    llvm/branches/wendling/eh/test/MC/AsmParser/directive_values.s
    llvm/branches/wendling/eh/test/MC/AsmParser/exprs.s
    llvm/branches/wendling/eh/test/MC/AsmParser/macros.s
    llvm/branches/wendling/eh/test/MC/COFF/   (props changed)
    llvm/branches/wendling/eh/test/MC/COFF/dg.exp
    llvm/branches/wendling/eh/test/MC/Disassembler/arm-tests.txt
    llvm/branches/wendling/eh/test/MC/Disassembler/neon-tests.txt
    llvm/branches/wendling/eh/test/MC/Disassembler/simple-tests.txt
    llvm/branches/wendling/eh/test/MC/Disassembler/thumb-tests.txt
    llvm/branches/wendling/eh/test/MC/MachO/absolutize.s
    llvm/branches/wendling/eh/test/MC/MachO/darwin-x86_64-reloc-offsets.s
    llvm/branches/wendling/eh/test/MC/MachO/darwin-x86_64-reloc.s
    llvm/branches/wendling/eh/test/MC/MachO/direction_labels.s
    llvm/branches/wendling/eh/test/MC/MachO/indirect-symbols.s
    llvm/branches/wendling/eh/test/MC/MachO/jcc.s
    llvm/branches/wendling/eh/test/MC/MachO/relax-jumps.s
    llvm/branches/wendling/eh/test/MC/MachO/reloc-pcrel-offset.s
    llvm/branches/wendling/eh/test/MC/MachO/reloc.s
    llvm/branches/wendling/eh/test/MC/MachO/string-table.s
    llvm/branches/wendling/eh/test/MC/MachO/tbss.s
    llvm/branches/wendling/eh/test/MC/MachO/tdata.s
    llvm/branches/wendling/eh/test/MC/MachO/thread_init_func.s
    llvm/branches/wendling/eh/test/MC/MachO/tls.s
    llvm/branches/wendling/eh/test/MC/MachO/tlv-reloc.s
    llvm/branches/wendling/eh/test/MC/MachO/tlv.s
    llvm/branches/wendling/eh/test/MC/MachO/x86_32-optimal_nop.s
    llvm/branches/wendling/eh/test/MC/MachO/zerofill-5.s
    llvm/branches/wendling/eh/test/Makefile
    llvm/branches/wendling/eh/test/Other/constant-fold-gep.ll
    llvm/branches/wendling/eh/test/Other/lint.ll
    llvm/branches/wendling/eh/test/Scripts/coff-dump.py
    llvm/branches/wendling/eh/test/Scripts/coff-dump.py.bat
    llvm/branches/wendling/eh/test/Scripts/macho-dump
    llvm/branches/wendling/eh/test/TableGen/defmclass.td
    llvm/branches/wendling/eh/test/TestRunner.sh
    llvm/branches/wendling/eh/test/Transforms/ArgumentPromotion/basictest.ll
    llvm/branches/wendling/eh/test/Transforms/ConstProp/constant-expr.ll
    llvm/branches/wendling/eh/test/Transforms/ConstProp/overflow-ops.ll
    llvm/branches/wendling/eh/test/Transforms/ConstantMerge/dont-merge.ll
    llvm/branches/wendling/eh/test/Transforms/DeadStoreElimination/2008-07-28-load-store.ll
    llvm/branches/wendling/eh/test/Transforms/DeadStoreElimination/PartialStore.ll
    llvm/branches/wendling/eh/test/Transforms/DeadStoreElimination/const-pointers.ll
    llvm/branches/wendling/eh/test/Transforms/DeadStoreElimination/context-sensitive.ll
    llvm/branches/wendling/eh/test/Transforms/DeadStoreElimination/free.ll
    llvm/branches/wendling/eh/test/Transforms/DeadStoreElimination/lifetime.ll
    llvm/branches/wendling/eh/test/Transforms/DeadStoreElimination/no-targetdata.ll
    llvm/branches/wendling/eh/test/Transforms/DeadStoreElimination/simple.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/2007-07-25-InfiniteLoop.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/2007-07-26-InterlockingLoops.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/2007-07-31-NoDomInherit.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/2007-07-31-RedundantPhi.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/2008-07-02-Unreachable.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/2009-07-13-MemDepSortFail.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/2010-03-31-RedundantPHIs.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/calls-nonlocal.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/condprop.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/invariant-simple.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/lifetime-simple.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/load-constant-mem.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/lpre-call-wrap-2.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/mixed.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/nonescaping-malloc.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/null-aliases-nothing.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/pre-load.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/pre-single-pred.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/rle-must-alias.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/rle-nonlocal.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/rle-semidominated.ll
    llvm/branches/wendling/eh/test/Transforms/GVN/rle.ll
    llvm/branches/wendling/eh/test/Transforms/GlobalOpt/2008-07-17-addrspace.ll
    llvm/branches/wendling/eh/test/Transforms/GlobalOpt/crash.ll
    llvm/branches/wendling/eh/test/Transforms/GlobalOpt/ctor-list-opt.ll
    llvm/branches/wendling/eh/test/Transforms/IPConstantProp/2009-09-24-byval-ptr.ll
    llvm/branches/wendling/eh/test/Transforms/IndVarSimplify/2009-05-24-useafterfree.ll
    llvm/branches/wendling/eh/test/Transforms/IndVarSimplify/loop_evaluate10.ll
    llvm/branches/wendling/eh/test/Transforms/Inline/devirtualize-3.ll
    llvm/branches/wendling/eh/test/Transforms/Inline/devirtualize.ll
    llvm/branches/wendling/eh/test/Transforms/Inline/gvn-inline-iteration.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/align-addr.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/and2.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/cast.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/crash.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/intrinsics.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/memcpy.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/or.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/phi.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/shift.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/urem-simplify-bug.ll
    llvm/branches/wendling/eh/test/Transforms/InstCombine/xor2.ll
    llvm/branches/wendling/eh/test/Transforms/JumpThreading/basic.ll
    llvm/branches/wendling/eh/test/Transforms/JumpThreading/crash.ll
    llvm/branches/wendling/eh/test/Transforms/LICM/2008-07-22-LoadGlobalConstant.ll
    llvm/branches/wendling/eh/test/Transforms/LICM/hoisting.ll
    llvm/branches/wendling/eh/test/Transforms/LICM/scalar_promote.ll
    llvm/branches/wendling/eh/test/Transforms/LICM/sinking.ll
    llvm/branches/wendling/eh/test/Transforms/LoopRotate/phi-duplicate.ll
    llvm/branches/wendling/eh/test/Transforms/LoopStrengthReduce/pr3571.ll
    llvm/branches/wendling/eh/test/Transforms/LoopStrengthReduce/uglygep.ll
    llvm/branches/wendling/eh/test/Transforms/MemCpyOpt/2008-02-24-MultipleUseofSRet.ll
    llvm/branches/wendling/eh/test/Transforms/MemCpyOpt/2008-03-13-ReturnSlotBitcast.ll
    llvm/branches/wendling/eh/test/Transforms/MemCpyOpt/memcpy.ll
    llvm/branches/wendling/eh/test/Transforms/MemCpyOpt/memmove.ll
    llvm/branches/wendling/eh/test/Transforms/MemCpyOpt/sret.ll
    llvm/branches/wendling/eh/test/Transforms/PartialSpecialize/two-specializations.ll
    llvm/branches/wendling/eh/test/Transforms/ScalarRepl/vector_promote.ll
    llvm/branches/wendling/eh/test/Transforms/SimplifyCFG/2008-04-27-MultipleReturnCrash.ll
    llvm/branches/wendling/eh/test/Transforms/SimplifyCFG/basictest.ll
    llvm/branches/wendling/eh/test/Transforms/SimplifyLibCalls/StrChr.ll
    llvm/branches/wendling/eh/test/Transforms/Sink/basic.ll
    llvm/branches/wendling/eh/test/Transforms/TailCallElim/accum_recursion.ll
    llvm/branches/wendling/eh/test/Transforms/TailDup/2008-06-11-AvoidDupLoopHeader.ll
    llvm/branches/wendling/eh/test/lit.cfg
    llvm/branches/wendling/eh/tools/CMakeLists.txt
    llvm/branches/wendling/eh/tools/Makefile
    llvm/branches/wendling/eh/tools/bugpoint/BugDriver.cpp
    llvm/branches/wendling/eh/tools/bugpoint/BugDriver.h
    llvm/branches/wendling/eh/tools/bugpoint/CMakeLists.txt
    llvm/branches/wendling/eh/tools/bugpoint/CrashDebugger.cpp
    llvm/branches/wendling/eh/tools/bugpoint/ExecutionDriver.cpp
    llvm/branches/wendling/eh/tools/bugpoint/ExtractFunction.cpp
    llvm/branches/wendling/eh/tools/bugpoint/FindBugs.cpp
    llvm/branches/wendling/eh/tools/bugpoint/Miscompilation.cpp
    llvm/branches/wendling/eh/tools/bugpoint/OptimizerDriver.cpp
    llvm/branches/wendling/eh/tools/bugpoint/bugpoint.cpp
    llvm/branches/wendling/eh/tools/gold/Makefile
    llvm/branches/wendling/eh/tools/gold/README.txt
    llvm/branches/wendling/eh/tools/gold/gold-plugin.cpp
    llvm/branches/wendling/eh/tools/llc/llc.cpp
    llvm/branches/wendling/eh/tools/lli/lli.cpp
    llvm/branches/wendling/eh/tools/llvm-as/llvm-as.cpp
    llvm/branches/wendling/eh/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
    llvm/branches/wendling/eh/tools/llvm-config/CMakeLists.txt
    llvm/branches/wendling/eh/tools/llvm-config/llvm-config.in.in
    llvm/branches/wendling/eh/tools/llvm-diff/DifferenceEngine.cpp
    llvm/branches/wendling/eh/tools/llvm-diff/DifferenceEngine.h
    llvm/branches/wendling/eh/tools/llvm-diff/llvm-diff.cpp
    llvm/branches/wendling/eh/tools/llvm-dis/llvm-dis.cpp
    llvm/branches/wendling/eh/tools/llvm-extract/llvm-extract.cpp
    llvm/branches/wendling/eh/tools/llvm-ld/llvm-ld.cpp
    llvm/branches/wendling/eh/tools/llvm-link/llvm-link.cpp
    llvm/branches/wendling/eh/tools/llvm-mc/Disassembler.cpp
    llvm/branches/wendling/eh/tools/llvm-mc/Disassembler.h
    llvm/branches/wendling/eh/tools/llvm-mc/llvm-mc.cpp
    llvm/branches/wendling/eh/tools/llvm-nm/llvm-nm.cpp
    llvm/branches/wendling/eh/tools/llvm-prof/llvm-prof.cpp
    llvm/branches/wendling/eh/tools/llvm-shlib/Makefile
    llvm/branches/wendling/eh/tools/llvm-stub/llvm-stub.c
    llvm/branches/wendling/eh/tools/llvmc/CMakeLists.txt
    llvm/branches/wendling/eh/tools/llvmc/Makefile
    llvm/branches/wendling/eh/tools/llvmc/doc/LLVMC-Reference.rst
    llvm/branches/wendling/eh/tools/lto/LTOCodeGenerator.cpp
    llvm/branches/wendling/eh/tools/lto/LTOCodeGenerator.h
    llvm/branches/wendling/eh/tools/lto/LTOModule.cpp
    llvm/branches/wendling/eh/tools/lto/LTOModule.h
    llvm/branches/wendling/eh/tools/lto/Makefile
    llvm/branches/wendling/eh/tools/lto/lto.cpp
    llvm/branches/wendling/eh/tools/lto/lto.exports
    llvm/branches/wendling/eh/tools/opt/AnalysisWrappers.cpp
    llvm/branches/wendling/eh/tools/opt/GraphPrinters.cpp
    llvm/branches/wendling/eh/tools/opt/PrintSCC.cpp
    llvm/branches/wendling/eh/tools/opt/opt.cpp
    llvm/branches/wendling/eh/unittests/ADT/APIntTest.cpp
    llvm/branches/wendling/eh/unittests/ADT/BitVectorTest.cpp
    llvm/branches/wendling/eh/unittests/ADT/Makefile
    llvm/branches/wendling/eh/unittests/ADT/SmallBitVectorTest.cpp
    llvm/branches/wendling/eh/unittests/ADT/SmallVectorTest.cpp
    llvm/branches/wendling/eh/unittests/ADT/StringRefTest.cpp
    llvm/branches/wendling/eh/unittests/ADT/TripleTest.cpp
    llvm/branches/wendling/eh/unittests/Makefile
    llvm/branches/wendling/eh/unittests/Makefile.unittest
    llvm/branches/wendling/eh/unittests/Support/ConstantRangeTest.cpp
    llvm/branches/wendling/eh/unittests/Support/System.cpp
    llvm/branches/wendling/eh/unittests/Support/ValueHandleTest.cpp
    llvm/branches/wendling/eh/unittests/VMCore/InstructionsTest.cpp
    llvm/branches/wendling/eh/unittests/VMCore/PassManagerTest.cpp
    llvm/branches/wendling/eh/utils/FileCheck/FileCheck.cpp
    llvm/branches/wendling/eh/utils/FileUpdate/FileUpdate.cpp
    llvm/branches/wendling/eh/utils/GenLibDeps.pl
    llvm/branches/wendling/eh/utils/GetSourceVersion
    llvm/branches/wendling/eh/utils/Makefile
    llvm/branches/wendling/eh/utils/PerfectShuffle/PerfectShuffle.cpp
    llvm/branches/wendling/eh/utils/TableGen/ARMDecoderEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/AsmMatcherEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/AsmWriterEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/AsmWriterInst.h
    llvm/branches/wendling/eh/utils/TableGen/CMakeLists.txt
    llvm/branches/wendling/eh/utils/TableGen/CallingConvEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/ClangAttrEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/ClangAttrEmitter.h
    llvm/branches/wendling/eh/utils/TableGen/CodeEmitterGen.cpp
    llvm/branches/wendling/eh/utils/TableGen/CodeGenDAGPatterns.cpp
    llvm/branches/wendling/eh/utils/TableGen/CodeGenInstruction.cpp
    llvm/branches/wendling/eh/utils/TableGen/CodeGenInstruction.h
    llvm/branches/wendling/eh/utils/TableGen/CodeGenIntrinsics.h
    llvm/branches/wendling/eh/utils/TableGen/CodeGenRegisters.h
    llvm/branches/wendling/eh/utils/TableGen/CodeGenTarget.cpp
    llvm/branches/wendling/eh/utils/TableGen/CodeGenTarget.h
    llvm/branches/wendling/eh/utils/TableGen/DAGISelEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/DAGISelEmitter.h
    llvm/branches/wendling/eh/utils/TableGen/DAGISelMatcherEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/DAGISelMatcherGen.cpp
    llvm/branches/wendling/eh/utils/TableGen/EDEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/FastISelEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/IntrinsicEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/LLVMCConfigurationEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/NeonEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/Record.cpp
    llvm/branches/wendling/eh/utils/TableGen/Record.h
    llvm/branches/wendling/eh/utils/TableGen/RegisterInfoEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/SubtargetEmitter.cpp
    llvm/branches/wendling/eh/utils/TableGen/SubtargetEmitter.h
    llvm/branches/wendling/eh/utils/TableGen/TGLexer.cpp
    llvm/branches/wendling/eh/utils/TableGen/TGLexer.h
    llvm/branches/wendling/eh/utils/TableGen/TGParser.cpp
    llvm/branches/wendling/eh/utils/TableGen/TGParser.h
    llvm/branches/wendling/eh/utils/TableGen/TableGen.cpp
    llvm/branches/wendling/eh/utils/TableGen/X86DisassemblerTables.cpp
    llvm/branches/wendling/eh/utils/TableGen/X86RecognizableInstr.cpp
    llvm/branches/wendling/eh/utils/buildit/GNUmakefile
    llvm/branches/wendling/eh/utils/buildit/build_llvm
    llvm/branches/wendling/eh/utils/emacs/llvm-mode.el
    llvm/branches/wendling/eh/utils/emacs/tablegen-mode.el
    llvm/branches/wendling/eh/utils/findmisopt
    llvm/branches/wendling/eh/utils/findoptdiff
    llvm/branches/wendling/eh/utils/lit/TODO
    llvm/branches/wendling/eh/utils/lit/lit/LitConfig.py
    llvm/branches/wendling/eh/utils/lit/lit/LitFormats.py
    llvm/branches/wendling/eh/utils/lit/lit/TestFormats.py
    llvm/branches/wendling/eh/utils/lit/lit/TestRunner.py
    llvm/branches/wendling/eh/utils/lit/lit/TestingConfig.py
    llvm/branches/wendling/eh/utils/lit/lit/__init__.py
    llvm/branches/wendling/eh/utils/lit/setup.py
    llvm/branches/wendling/eh/utils/llvm-native-gcc
    llvm/branches/wendling/eh/utils/llvm-native-gxx
    llvm/branches/wendling/eh/utils/llvm.grm
    llvm/branches/wendling/eh/utils/llvmdo
    llvm/branches/wendling/eh/utils/profile.pl
    llvm/branches/wendling/eh/utils/unittest/UnitTestMain/TestMain.cpp
    llvm/branches/wendling/eh/utils/unittest/googletest/gtest.cc
    llvm/branches/wendling/eh/utils/unittest/googletest/include/gtest/internal/gtest-port.h
    llvm/branches/wendling/eh/utils/valgrind/i386-pc-linux-gnu.supp
    llvm/branches/wendling/eh/utils/valgrind/x86_64-pc-linux-gnu.supp
    llvm/branches/wendling/eh/utils/vim/llvm.vim
    llvm/branches/wendling/eh/utils/vim/vimrc

Propchange: llvm/branches/wendling/eh/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Oct 26 19:48:03 2010
@@ -1 +1,2 @@
-/llvm/trunk:104459-109962
+/llvm/branches/Apple/Pertwee:110850,110961
+/llvm/trunk:104459-117418

Modified: llvm/branches/wendling/eh/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/CMakeLists.txt?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/CMakeLists.txt (original)
+++ llvm/branches/wendling/eh/CMakeLists.txt Tue Oct 26 19:48:03 2010
@@ -1,10 +1,20 @@
 # See docs/CMake.html for instructions about how to build LLVM with CMake.
 
 project(LLVM)
-cmake_minimum_required(VERSION 2.6.1)
+cmake_minimum_required(VERSION 2.8)
+
+# Add path for custom modules
+set(CMAKE_MODULE_PATH
+  ${CMAKE_MODULE_PATH}
+  "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
+  "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
+  )
+
+set(PACKAGE_VERSION "2.9")
+include(VersionFromVCS)
+add_version_info_from_vcs(PACKAGE_VERSION)
 
 set(PACKAGE_NAME llvm)
-set(PACKAGE_VERSION 2.8svn)
 set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
 set(PACKAGE_BUGREPORT "llvmbugs at cs.uiuc.edu")
 
@@ -53,10 +63,9 @@
   CppBackend
   Mips
   MBlaze
-  MSIL
   MSP430
-  PIC16
   PowerPC
+  PTX
   Sparc
   SystemZ
   X86
@@ -71,6 +80,9 @@
     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
 endif( MSVC )
 
+set(CLANG_RESOURCE_DIR "" CACHE STRING
+  "Relative directory from the Clang binary to its resource files.")
+
 set(C_INCLUDE_DIRS "" CACHE STRING
   "Colon separated list of directories clang will search for headers.")
 
@@ -124,13 +136,6 @@
 
 set(llvm_builded_incs_dir ${LLVM_BINARY_DIR}/include/llvm)
 
-# Add path for custom modules
-set(CMAKE_MODULE_PATH
-  ${CMAKE_MODULE_PATH}
-  "${LLVM_MAIN_SRC_DIR}/cmake"
-  "${LLVM_MAIN_SRC_DIR}/cmake/modules"
-  )
-
 include(AddLLVMDefinitions)
 
 if(WIN32)
@@ -214,32 +219,17 @@
 endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
 
 if( MSVC )
-  # List of valid CRTs for MSVC
-  set(MSVC_CRT
-    MD
-    MDd
-    MT
-    MTd)
+  include(ChooseMSVCCRT)
 
-  set(LLVM_USE_CRT "" CACHE STRING "Specify VC++ CRT to use for debug/release configurations.")
   add_llvm_definitions( -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS )
   add_llvm_definitions( -D_SCL_SECURE_NO_WARNINGS -DCRT_NONSTDC_NO_WARNINGS )
   add_llvm_definitions( -D_SCL_SECURE_NO_DEPRECATE )
   add_llvm_definitions( -wd4146 -wd4503 -wd4996 -wd4800 -wd4244 -wd4624 )
-  add_llvm_definitions( -wd4355 -wd4715 -wd4180 -wd4345 -wd4224 )
+  add_llvm_definitions( -wd4355 -wd4715 -wd4180 -wd4345 -wd4224 -wd4267 )
 
   # Suppress 'new behavior: elements of array 'array' will be default initialized'
   add_llvm_definitions( -wd4351 )
 
-  if (NOT ${LLVM_USE_CRT} STREQUAL "")
-    list(FIND MSVC_CRT ${LLVM_USE_CRT} idx)
-    if (idx LESS 0)
-      message(FATAL_ERROR "Invalid value for LLVM_USE_CRT: ${LLVM_USE_CRT}. Valid options are one of: ${MSVC_CRT}")
-    endif (idx LESS 0)
-    add_llvm_definitions("/${LLVM_USE_CRT}")
-    message(STATUS "Using VC++ CRT: ${LLVM_USE_CRT}")
-  endif (NOT ${LLVM_USE_CRT} STREQUAL "")
-
   # Enable warnings
   if (LLVM_ENABLE_WARNINGS)
     add_llvm_definitions( /W4 /Wall )
@@ -271,6 +261,15 @@
 include(AddLLVM)
 include(TableGen)
 
+if( MINGW )
+  get_system_libs(LLVM_SYSTEM_LIBS_LIST)
+  foreach(l ${LLVM_SYSTEM_LIBS_LIST})
+    set(LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS} -l${l}")
+  endforeach()
+  set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES}${LLVM_SYSTEM_LIBS}")
+  set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES}${LLVM_SYSTEM_LIBS}")
+endif()
+
 add_subdirectory(lib/Support)
 add_subdirectory(lib/System)
 
@@ -309,11 +308,11 @@
 add_subdirectory(lib/MC)
 add_subdirectory(lib/MC/MCParser)
 add_subdirectory(lib/MC/MCDisassembler)
-add_subdirectory(test)
 
 add_subdirectory(utils/FileCheck)
 add_subdirectory(utils/count)
 add_subdirectory(utils/not)
+add_subdirectory(utils/llvm-lit)
 
 set(LLVM_ENUM_ASM_PRINTERS "")
 set(LLVM_ENUM_ASM_PARSERS "")
@@ -327,6 +326,11 @@
     set(LLVM_ENUM_ASM_PRINTERS 
       "${LLVM_ENUM_ASM_PRINTERS}LLVM_ASM_PRINTER(${t})\n")
   endif( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmPrinter/CMakeLists.txt )
+  if( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/InstPrinter/CMakeLists.txt )
+    add_subdirectory(lib/Target/${t}/InstPrinter)
+    set(LLVM_ENUM_ASM_PRINTERS
+      "${LLVM_ENUM_ASM_PRINTERS}LLVM_ASM_PRINTER(${t})\n")
+  endif( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/InstPrinter/CMakeLists.txt )
   if( EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Target/${t}/AsmParser/CMakeLists.txt )
     add_subdirectory(lib/Target/${t}/AsmParser)
     set(LLVM_ENUM_ASM_PARSERS 
@@ -367,11 +371,35 @@
 
 add_subdirectory(projects)
 
-option(LLVM_BUILD_TOOLS "Build LLVM tool programs." ON)
-add_subdirectory(tools)
+option(LLVM_BUILD_TOOLS
+  "Build the LLVM tools. If OFF, just generate build targets." ON)
+option(LLVM_INCLUDE_TOOLS "Generate build targets for the LLVM tools." ON)
+if( LLVM_INCLUDE_TOOLS )
+  add_subdirectory(tools)
+endif()
 
-option(LLVM_BUILD_EXAMPLES "Build LLVM example programs." OFF)
-add_subdirectory(examples)
+option(LLVM_BUILD_EXAMPLES
+  "Build the LLVM example programs. If OFF, just generate build targets." OFF)
+option(LLVM_INCLUDE_EXAMPLES "Generate build targets for the LLVM examples" ON)
+if( LLVM_INCLUDE_EXAMPLES )
+  add_subdirectory(examples)
+endif()
+
+option(LLVM_BUILD_TESTS
+  "Build LLVM unit tests. If OFF, just generate build targes." OFF)
+option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." ON)
+if( LLVM_INCLUDE_TESTS )
+  add_subdirectory(test)
+  add_subdirectory(utils/unittest)
+  add_subdirectory(unittests)
+  if (MSVC)
+    # This utility is used to prevent chrashing tests from calling Dr. Watson on
+    # Windows.
+    add_subdirectory(utils/KillTheDoctor)
+  endif()
+endif()
+
+add_subdirectory(cmake/modules)
 
 install(DIRECTORY include/
   DESTINATION include
@@ -396,3 +424,9 @@
   )
 
 # TODO: make and install documentation.
+
+set(CPACK_PACKAGE_VENDOR "LLVM")
+set(CPACK_PACKAGE_VERSION_MAJOR 2)
+set(CPACK_PACKAGE_VERSION_MINOR 9)
+add_version_info_from_vcs(CPACK_PACKAGE_VERSION_PATCH)
+include(CPack)

Modified: llvm/branches/wendling/eh/CREDITS.TXT
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/CREDITS.TXT?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/CREDITS.TXT (original)
+++ llvm/branches/wendling/eh/CREDITS.TXT Tue Oct 26 19:48:03 2010
@@ -39,7 +39,7 @@
 E: brukman+llvm at uiuc.edu
 W: http://misha.brukman.net
 D: Portions of X86 and Sparc JIT compilers, PowerPC backend
-D: Incremental bytecode loader
+D: Incremental bitcode loader
 
 N: Cameron Buschardt
 E: buschard at uiuc.edu
@@ -252,6 +252,12 @@
 E: scottm at aero.org
 D: Added STI Cell SPU backend.
 
+N: Takumi Nakamura
+E: geek4civic at gmail.com
+E: chapuni at hf.rim.or.jp
+D: Cygwin and MinGW support.
+S: Yokohama, Japan
+
 N: Edward O'Callaghan
 E: eocallaghan at auroraux.org
 W: http://www.auroraux.org
@@ -298,7 +304,10 @@
 
 N: Duncan Sands
 E: baldrick at free.fr
-D: Ada front-end, exception handling improvements
+D: Ada support in llvm-gcc
+D: Dragonegg plugin
+D: Exception handling improvements
+D: Type legalizer rewrite
 
 N: Ruchira Sasanka
 E: sasanka at uiuc.edu

Modified: llvm/branches/wendling/eh/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/Makefile?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/Makefile (original)
+++ llvm/branches/wendling/eh/Makefile Tue Oct 26 19:48:03 2010
@@ -170,7 +170,7 @@
   include/llvm/Config/AsmParsers.def \
   include/llvm/Config/Disassemblers.def \
   include/llvm/System/DataTypes.h \
-  tools/llvmc/plugins/Base/Base.td
+  tools/llvmc/src/Base.td
 FilesToConfigPATH  := $(addprefix $(LLVM_OBJ_ROOT)/,$(FilesToConfig))
 
 all-local:: $(FilesToConfigPATH)
@@ -195,9 +195,6 @@
 check-llvm2cpp:
 	$(Verb)$(MAKE) check TESTSUITE=Feature RUNLLVM2CPP=1
 
-check-one:
-	$(Verb)$(MAKE) -C test check-one TESTONE=$(TESTONE)
-
 srpm: $(LLVM_OBJ_ROOT)/llvm.spec
 	rpmbuild -bs $(LLVM_OBJ_ROOT)/llvm.spec
 

Modified: llvm/branches/wendling/eh/Makefile.config.in
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/Makefile.config.in?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/Makefile.config.in (original)
+++ llvm/branches/wendling/eh/Makefile.config.in Tue Oct 26 19:48:03 2010
@@ -39,14 +39,18 @@
 PROJECT_NAME := $(LLVMPackageName)
 endif
 
-PROJ_OBJ_DIR  := $(shell $(PWD))
-PROJ_OBJ_ROOT := $(shell cd $(PROJ_OBJ_DIR)/$(LEVEL); $(PWD))
+# The macro below is expanded when 'realpath' is not built-in.
+# Built-in 'realpath' is available on GNU Make 3.81.
+realpath = $(shell cd $(1); $(PWD))
+
+PROJ_OBJ_DIR  := $(call realpath, .)
+PROJ_OBJ_ROOT := $(call realpath, $(PROJ_OBJ_DIR)/$(LEVEL))
 
 ifeq ($(PROJECT_NAME),llvm)
-LLVM_SRC_ROOT   := $(shell cd @abs_top_srcdir@; $(PWD))
-LLVM_OBJ_ROOT   := $(shell cd @abs_top_builddir@; $(PWD))
-PROJ_SRC_ROOT   := $(shell cd $(LLVM_SRC_ROOT); $(PWD))
-PROJ_SRC_DIR    := $(shell cd $(LLVM_SRC_ROOT)/$(patsubst $(PROJ_OBJ_ROOT)%,%,$(PROJ_OBJ_DIR)); $(PWD))
+LLVM_SRC_ROOT   := $(call realpath, @abs_top_srcdir@)
+LLVM_OBJ_ROOT   := $(call realpath, @abs_top_builddir@)
+PROJ_SRC_ROOT   := $(LLVM_SRC_ROOT)
+PROJ_SRC_DIR    := $(call realpath, $(LLVM_SRC_ROOT)/$(patsubst $(PROJ_OBJ_ROOT)%,%,$(PROJ_OBJ_DIR)))
 prefix          := @prefix@
 PROJ_prefix     := $(prefix)
 PROJ_VERSION    := $(LLVMVersion)
@@ -66,7 +70,7 @@
 ifndef LLVM_OBJ_ROOT
 $(error Projects must define LLVM_OBJ_ROOT)
 endif
-PROJ_SRC_DIR := $(shell cd $(PROJ_SRC_ROOT)/$(patsubst $(PROJ_OBJ_ROOT)%,%,$(PROJ_OBJ_DIR)); $(PWD))
+PROJ_SRC_DIR := $(call realpath, $(PROJ_SRC_ROOT)/$(patsubst $(PROJ_OBJ_ROOT)%,%,$(PROJ_OBJ_DIR)))
 prefix          := $(PROJ_INSTALL_ROOT)
 PROJ_prefix     := $(prefix)
 ifndef PROJ_VERSION

Modified: llvm/branches/wendling/eh/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/Makefile.rules?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/Makefile.rules (original)
+++ llvm/branches/wendling/eh/Makefile.rules Tue Oct 26 19:48:03 2010
@@ -129,11 +129,8 @@
 	  $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
 	  $(ConfigStatusScript)
 
-# FIXME: The {PIC16,MSP430}/AsmPrinter line here is a hack to force a reconfigure to pick
-# up AsmPrinter changes. Remove it after a reasonable delay from 2009-08-13.
-
 .PRECIOUS: $(ConfigStatusScript)
-$(ConfigStatusScript): $(ConfigureScript) $(LLVM_SRC_ROOT)/lib/Target/PIC16/AsmPrinter/Makefile $(LLVM_SRC_ROOT)/lib/Target/MSP430/AsmPrinter/Makefile
+$(ConfigStatusScript): $(ConfigureScript)
 	$(Echo) Reconfiguring with $<
 	$(Verb) cd $(PROJ_OBJ_ROOT) && \
 	  if test -w $(PROJ_OBJ_ROOT)/config.cache ; then \
@@ -161,9 +158,13 @@
 # If the Makefile in the source tree has been updated, copy it over into the
 # build tree. But, only do this if the source and object makefiles differ
 #------------------------------------------------------------------------
+ifndef PROJ_MAKEFILE
+PROJ_MAKEFILE := $(PROJ_SRC_DIR)/Makefile
+endif
+
 ifneq ($(PROJ_OBJ_DIR),$(PROJ_SRC_DIR))
 
-Makefile: $(PROJ_SRC_DIR)/Makefile $(ExtraMakefiles)
+Makefile: $(PROJ_MAKEFILE) $(ExtraMakefiles)
 	$(Echo) "Updating Makefile"
 	$(Verb) $(MKDIR) $(@D)
 	$(Verb) $(CP) -f $< $@
@@ -171,7 +172,7 @@
 # Copy the Makefile.* files unless we're in the root directory which avoids
 # the copying of Makefile.config.in or other things that should be explicitly
 # taken care of.
-$(PROJ_OBJ_DIR)/Makefile% : $(PROJ_SRC_DIR)/Makefile%
+$(PROJ_OBJ_DIR)/Makefile% : $(PROJ_MAKEFILE)%
 	@case '$?' in \
           *Makefile.rules) ;; \
           *.in) ;; \
@@ -196,102 +197,15 @@
 install-bytecode:: install-bytecode-local
 
 ###############################################################################
-# LLVMC: Provide rules for compiling llvmc plugins
+# LLVMC: Provide rules for compiling llvmc-based driver
 ###############################################################################
 
-ifdef LLVMC_PLUGIN
-
-LIBRARYNAME := $(patsubst %,plugin_llvmc_%,$(LLVMC_PLUGIN))
-CPP.Flags += -DLLVMC_PLUGIN_NAME=$(LLVMC_PLUGIN)
-
-ifeq ($(ENABLE_LLVMC_DYNAMIC),1)
-  LD.Flags += -lCompilerDriver
-endif
-
-# Build a dynamic library if the user runs `make` directly from the plugin
-# directory.
-ifndef LLVMC_BUILTIN_PLUGIN
-  LOADABLE_MODULE = 1
-endif
-
-# TableGen stuff...
-ifneq ($(BUILT_SOURCES),)
-  LLVMC_BUILD_AUTOGENERATED_INC=1
-endif
-
-endif # LLVMC_PLUGIN
-
 ifdef LLVMC_BASED_DRIVER
 
 TOOLNAME = $(LLVMC_BASED_DRIVER)
 
-ifeq ($(ENABLE_LLVMC_DYNAMIC),1)
-  LD.Flags += -lCompilerDriver
-else
-  LLVMLIBS = CompilerDriver.a
-  LINK_COMPONENTS = support system
-endif
-
-# Preprocessor magic that generates references to static variables in built-in
-# plugins.
-ifneq ($(LLVMC_BUILTIN_PLUGINS),)
-
-USEDLIBS += $(patsubst %,plugin_llvmc_%.a,$(LLVMC_BUILTIN_PLUGINS))
-
-LLVMC_BUILTIN_PLUGIN_1 = $(word 1, $(LLVMC_BUILTIN_PLUGINS))
-LLVMC_BUILTIN_PLUGIN_2 = $(word 2, $(LLVMC_BUILTIN_PLUGINS))
-LLVMC_BUILTIN_PLUGIN_3 = $(word 3, $(LLVMC_BUILTIN_PLUGINS))
-LLVMC_BUILTIN_PLUGIN_4 = $(word 4, $(LLVMC_BUILTIN_PLUGINS))
-LLVMC_BUILTIN_PLUGIN_5 = $(word 5, $(LLVMC_BUILTIN_PLUGINS))
-LLVMC_BUILTIN_PLUGIN_6 = $(word 6, $(LLVMC_BUILTIN_PLUGINS))
-LLVMC_BUILTIN_PLUGIN_7 = $(word 7, $(LLVMC_BUILTIN_PLUGINS))
-LLVMC_BUILTIN_PLUGIN_8 = $(word 8, $(LLVMC_BUILTIN_PLUGINS))
-LLVMC_BUILTIN_PLUGIN_9 = $(word 9, $(LLVMC_BUILTIN_PLUGINS))
-LLVMC_BUILTIN_PLUGIN_10 = $(word 10, $(LLVMC_BUILTIN_PLUGINS))
-
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_1),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_1=$(LLVMC_BUILTIN_PLUGIN_1)
-endif
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_2),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_2=$(LLVMC_BUILTIN_PLUGIN_2)
-endif
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_3),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_3=$(LLVMC_BUILTIN_PLUGIN_3)
-endif
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_4),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_4=$(LLVMC_BUILTIN_PLUGIN_4)
-endif
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_5),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_5)
-endif
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_6),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_6)
-endif
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_7),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_7)
-endif
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_8),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_8)
-endif
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_9),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_9)
-endif
-
-ifneq ($(LLVMC_BUILTIN_PLUGIN_10),)
-CPP.Flags += -DLLVMC_BUILTIN_PLUGIN_5=$(LLVMC_BUILTIN_PLUGIN_10)
-endif
-
-
-endif
+LLVMLIBS = CompilerDriver.a
+LINK_COMPONENTS = support system
 
 endif # LLVMC_BASED_DRIVER
 
@@ -387,7 +301,7 @@
   CXX.Flags += -fno-rtti
 endif
 
-ifdef ENABLE_COVERAGE
+ifeq ($(ENABLE_COVERAGE),1)
   BuildMode := $(BuildMode)+Coverage
   CXX.Flags += -ftest-coverage -fprofile-arcs
   C.Flags   += -ftest-coverage -fprofile-arcs
@@ -395,17 +309,17 @@
 
 # If DISABLE_ASSERTIONS=1 is specified (make command line or configured),
 # then disable assertions by defining the appropriate preprocessor symbols.
-ifndef DISABLE_ASSERTIONS
+ifeq ($(DISABLE_ASSERTIONS),1)
+  CPP.Defines += -DNDEBUG
+else
   BuildMode := $(BuildMode)+Asserts
   CPP.Defines += -D_DEBUG
-else
-  CPP.Defines += -DNDEBUG
 endif
 
 # If ENABLE_EXPENSIVE_CHECKS=1 is specified (make command line or
 # configured), then enable expensive checks by defining the
 # appropriate preprocessor symbols.
-ifdef ENABLE_EXPENSIVE_CHECKS
+ifeq ($(ENABLE_EXPENSIVE_CHECKS),1)
   BuildMode := $(BuildMode)+Checks
   CPP.Defines += -D_GLIBCXX_DEBUG -DXDEBUG
 endif
@@ -498,6 +412,26 @@
 LLVMExmplDir:= $(LLVM_OBJ_ROOT)/$(BuildMode)/examples
 
 #--------------------------------------------------------------------
+# Locations of shared libraries
+#--------------------------------------------------------------------
+
+SharedPrefix     := lib
+SharedLibDir     := $(LibDir)
+LLVMSharedLibDir := $(LLVMLibDir)
+
+# Win32.DLL prefers to be located on the "PATH" of binaries.
+ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
+  SharedLibDir     := $(ToolDir)
+  LLVMSharedLibDir := $(LLVMToolDir)
+
+  ifeq ($(HOST_OS),Cygwin)
+    SharedPrefix  := cyg
+  else
+    SharedPrefix  :=
+  endif
+endif
+
+#--------------------------------------------------------------------
 # LLVM Capable Compiler
 #--------------------------------------------------------------------
 
@@ -570,12 +504,7 @@
     SharedLinkOptions += -mmacosx-version-min=$(DARWIN_VERSION)
   endif
 else
-  ifeq ($(HOST_OS),Cygwin)
-    SharedLinkOptions=-shared -nostdlib -Wl,--export-all-symbols \
-                      -Wl,--enable-auto-import -Wl,--enable-auto-image-base
-  else
-    SharedLinkOptions=-shared
-  endif
+  SharedLinkOptions=-shared
 endif
 
 ifeq ($(TARGET_OS),Darwin)
@@ -585,11 +514,13 @@
 endif
 
 ifdef SHARED_LIBRARY
+ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
 ifneq ($(HOST_OS),Darwin)
   LD.Flags += $(RPATH) -Wl,'$$ORIGIN'
 else
 ifneq ($(DARWIN_MAJVERS),4)
-  LD.Flags += $(RPATH) -Wl,$(LibDir)
+  LD.Flags += $(RPATH) -Wl,$(SharedLibDir)
+endif
 endif
 endif
 endif
@@ -617,14 +548,21 @@
   Install.StripFlag += -s
 endif
 
+ifdef TOOL_NO_EXPORTS
+  DynamicFlags :=
+else
+  DynamicFlag := $(RDYNAMIC)
+endif
+
 # Adjust linker flags for building an executable
-ifneq ($(HOST_OS), $(filter $(HOST_OS), Darwin Cygwin MingW))
+ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
+ifneq ($(HOST_OS), Darwin)
 ifdef TOOLNAME
   LD.Flags += $(RPATH) -Wl,'$$ORIGIN/../lib'
   ifdef EXAMPLE_TOOL
-    LD.Flags += $(RPATH) -Wl,$(ExmplDir) $(RDYNAMIC)
+    LD.Flags += $(RPATH) -Wl,$(ExmplDir) $(DynamicFlag)
   else
-    LD.Flags += $(RPATH) -Wl,$(ToolDir) $(RDYNAMIC)
+    LD.Flags += $(RPATH) -Wl,$(ToolDir) $(DynamicFlag)
   endif
 endif
 else
@@ -632,6 +570,7 @@
   LD.Flags += $(RPATH) -Wl, at executable_path/../lib
 endif
 endif
+endif
 
 
 #----------------------------------------------------------
@@ -958,6 +897,16 @@
 LLVMLibsPaths   := $(addprefix $(LLVMLibDir)/,$(LLVMUsedLibs))
 endif
 
+# Loadable module for Win32 requires all symbols resolved for linking.
+# Then all symbols in LLVM.dll will be available.
+ifeq ($(ENABLE_SHARED),1)
+  ifdef LOADABLE_MODULE
+    ifneq (,$(filter $(HOST_OS),Cygwin MingW))
+      LINK_COMPONENTS += all
+    endif
+  endif
+endif
+
 ifndef IS_CLEANING_TARGET
 ifdef LINK_COMPONENTS
 
@@ -970,12 +919,28 @@
 $(ToolDir)/$(strip $(TOOLNAME))$(EXEEXT): $(LLVM_CONFIG)
 
 ifeq ($(ENABLE_SHARED), 1)
+# We can take the "auto-import" feature to get rid of using dllimport.
+ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
+LLVMLibsOptions += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc \
+                   -L $(SharedLibDir)
+endif
 LLVMLibsOptions += -lLLVM-$(LLVMVersion)
-LLVMLibsPaths += $(LibDir)/libLLVM-$(LLVMVersion)$(SHLIBEXT)
+LLVMLibsPaths += $(SharedLibDir)/$(SharedPrefix)LLVM-$(LLVMVersion)$(SHLIBEXT)
 else
-LLVMLibsOptions += $(shell $(LLVM_CONFIG) --libs     $(LINK_COMPONENTS))
-LLVMLibsPaths   += $(LLVM_CONFIG) \
-                   $(shell $(LLVM_CONFIG) --libfiles $(LINK_COMPONENTS))
+
+ifndef NO_LLVM_CONFIG
+LLVMConfigLibs := $(shell $(LLVM_CONFIG) --libs $(LINK_COMPONENTS) || echo Error)
+ifeq ($(LLVMConfigLibs),Error)
+$(error llvm-config --libs failed)
+endif
+LLVMLibsOptions += $(LLVMConfigLibs)
+LLVMConfigLibfiles := $(shell $(LLVM_CONFIG) --libfiles $(LINK_COMPONENTS) || echo Error)
+ifeq ($(LLVMConfigLibfiles),Error)
+$(error llvm-config --libfiles failed)
+endif
+LLVMLibsPaths += $(LLVM_CONFIG) $(LLVMConfigLibfiles)
+endif
+
 endif
 endif
 endif
@@ -986,6 +951,11 @@
 # First, set up the native export file, which may differ from the source
 # export file.
 
+# The option --version-script is not effective on GNU ld win32.
+ifneq (,$(filter $(HOST_OS),Cygwin MingW))
+  HAVE_LINK_VERSION_SCRIPT := 0
+endif
+
 ifeq ($(HOST_OS),Darwin)
 # Darwin convention prefixes symbols with underscores.
 NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).sed
@@ -1006,12 +976,25 @@
 clean-local::
 	-$(Verb) $(RM) -f $(NativeExportsFile)
 else
+ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
+# GNU ld Win32 accepts .DEF files that contain "DATA" entries.
+NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE:.exports=.def))
+$(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) $(ObjDir)/.dir
+	$(Echo) Generating $(notdir $@)
+	$(Verb) $(ECHO) "EXPORTS" > $@
+	$(Verb) $(CAT) $< >> $@
+clean-local::
+	-$(Verb) $(RM) -f $(NativeExportsFile)
+else
+# Default behavior: just use the exports file verbatim.
 NativeExportsFile := $(EXPORTED_SYMBOL_FILE)
 endif
 endif
+endif
 
 # Now add the linker command-line options to use the native export file.
 
+# Darwin
 ifeq ($(HOST_OS),Darwin)
 LLVMLibsOptions += -Wl,-exported_symbols_list,$(NativeExportsFile)
 endif
@@ -1021,6 +1004,12 @@
 LLVMLibsOptions += -Wl,--version-script,$(NativeExportsFile)
 endif
 
+# Windows
+ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
+# LLVMLibsOptions is invalidated at processing tools/llvm-shlib.
+SharedLinkOptions += $(NativeExportsFile)
+endif
+
 endif
 
 ###############################################################################
@@ -1095,10 +1084,10 @@
 LIBRARYNAME := $(strip $(LIBRARYNAME))
 ifdef LOADABLE_MODULE
 LibName.A  := $(LibDir)/$(LIBRARYNAME).a
-LibName.SO := $(LibDir)/$(LIBRARYNAME)$(SHLIBEXT)
+LibName.SO := $(SharedLibDir)/$(LIBRARYNAME)$(SHLIBEXT)
 else
 LibName.A  := $(LibDir)/lib$(LIBRARYNAME).a
-LibName.SO := $(LibDir)/lib$(LIBRARYNAME)$(SHLIBEXT)
+LibName.SO := $(SharedLibDir)/$(SharedPrefix)$(LIBRARYNAME)$(SHLIBEXT)
 endif
 LibName.O  := $(LibDir)/$(LIBRARYNAME).o
 LibName.BCA:= $(LibDir)/lib$(LIBRARYNAME).bca
@@ -1123,13 +1112,13 @@
 else
 SharedLibKindMessage := "Shared Library"
 endif
-$(LibName.SO): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths) $(LibDir)/.dir
+$(LibName.SO): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths) $(SharedLibDir)/.dir
 	$(Echo) Linking $(BuildMode) $(SharedLibKindMessage) \
 	  $(notdir $@)
 	$(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO) \
 	  $(ProjLibsOptions) $(LLVMLibsOptions) $(LIBS)
 else
-$(LibName.SO): $(ObjectsO) $(LibDir)/.dir
+$(LibName.SO): $(ObjectsO) $(SharedLibDir)/.dir
 	$(Echo) Linking $(BuildMode) Shared Library $(notdir $@)
 	$(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO)
 endif
@@ -1146,21 +1135,23 @@
 	$(Echo) Uninstall circumvented with NO_INSTALL
 else
 
-ifdef LOADABLE_MODULE
-DestSharedLib = $(DESTDIR)$(PROJ_libdir)/$(LIBRARYNAME)$(SHLIBEXT)
+# Win32.DLL prefers to be located on the "PATH" of binaries.
+ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
+DestSharedLibDir := $(DESTDIR)$(PROJ_bindir)
 else
-DestSharedLib = $(DESTDIR)$(PROJ_libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
+DestSharedLibDir := $(DESTDIR)$(PROJ_libdir)
 endif
+DestSharedLib := $(DestSharedLibDir)/$(SharedPrefix)$(LIBRARYNAME)$(SHLIBEXT)
 
 install-local:: $(DestSharedLib)
 
-$(DestSharedLib): $(LibName.SO) $(DESTDIR)$(PROJ_libdir)
+$(DestSharedLib): $(LibName.SO) $(DestSharedLibDir)
 	$(Echo) Installing $(BuildMode) Shared Library $(DestSharedLib)
 	$(Verb) $(INSTALL) $(LibName.SO) $(DestSharedLib)
 
 uninstall-local::
 	$(Echo) Uninstalling $(BuildMode) Shared Library $(DestSharedLib)
-	-$(Verb) $(RM) -f $(DESTDIR)$(PROJ_libdir)/lib$(LIBRARYNAME).*
+	-$(Verb) $(RM) -f $(DestSharedLibDir)/$(SharedPrefix)$(LIBRARYNAME).*
 endif
 endif
 
@@ -1343,6 +1334,18 @@
 endif
 
 #---------------------------------------------------------
+# Tool Order File Support
+#---------------------------------------------------------
+
+ifeq ($(HOST_OS),Darwin)
+ifdef TOOL_ORDER_FINE
+
+LD.Flags += -Wl,-order_file,$(TOOL_ORDER_FILE)
+
+endif
+endif
+
+#---------------------------------------------------------
 # Tool Version Info Support
 #---------------------------------------------------------
 
@@ -1395,7 +1398,7 @@
 	$(Echo) Creating $(BuildMode) Alias $(TOOLALIAS) $(StripWarnMsg)
 	$(Verb) $(RM) -f $(ToolAliasBuildPath)
 	$(Verb) $(AliasTool) $(TOOLEXENAME) $(ToolAliasBuildPath)
-	$(Echo) ======= Finished Creating $(BuildMode) Alias $(TOOLNAME) \
+	$(Echo) ======= Finished Creating $(BuildMode) Alias $(TOOLALIAS) \
           $(StripWarnMsg)
 endif
 
@@ -1460,27 +1463,27 @@
 DEPEND_MOVEFILE = then $(MV) -f "$(ObjDir)/$*.d.tmp" "$(ObjDir)/$*.d"; \
                   else $(RM) "$(ObjDir)/$*.d.tmp"; exit 1; fi
 
-$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_SRC_DIR)/Makefile
+$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
 	$(Echo) "Compiling $*.cpp for $(BuildMode) build" $(PIC_FLAG)
 	$(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
 	        $(DEPEND_MOVEFILE)
 
-$(ObjDir)/%.o: %.mm $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_SRC_DIR)/Makefile
+$(ObjDir)/%.o: %.mm $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
 	$(Echo) "Compiling $*.mm for $(BuildMode) build" $(PIC_FLAG)
 	$(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
 	        $(DEPEND_MOVEFILE)
 
-$(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_SRC_DIR)/Makefile
+$(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
 	$(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG)
 	$(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
 	        $(DEPEND_MOVEFILE)
 
-$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_SRC_DIR)/Makefile
+$(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
 	$(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG)
 	$(Verb) if $(Compile.C) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
 	        $(DEPEND_MOVEFILE)
 
-$(ObjDir)/%.o: %.m $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_SRC_DIR)/Makefile
+$(ObjDir)/%.o: %.m $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
 	$(Echo) "Compiling $*.m for $(BuildMode) build" $(PIC_FLAG)
 	$(Verb) if $(Compile.C) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
 	        $(DEPEND_MOVEFILE)
@@ -1644,7 +1647,7 @@
 TABLEGEN_INC_FILES_COMMON = 1
 endif
 
-ifdef LLVMC_BUILD_AUTOGENERATED_INC
+ifdef LLVMC_BASED_DRIVER
 TABLEGEN_INC_FILES_COMMON = 1
 endif
 
@@ -1768,20 +1771,26 @@
 
 endif # TARGET
 
-ifdef LLVMC_BUILD_AUTOGENERATED_INC
+ifdef LLVMC_BASED_DRIVER
+
+TDSrc := $(sort $(strip $(wildcard $(PROJ_SRC_DIR)/*.td)) \
+		$(strip $(wildcard $(PROJ_OBJ_DIR)/*.td)))
+
+TDCommon := $(strip $(wildcard \
+		$(LLVM_SRC_ROOT)/include/llvm/CompilerDriver/*.td))
 
-LLVMCPluginSrc := $(sort $(strip $(wildcard $(PROJ_SRC_DIR)/*.td)) \
-	$(strip $(wildcard $(PROJ_OBJ_DIR)/*.td)))
+TDFiles := $(TDSrc) $(TDCommon)
 
-TDFiles := $(LLVMCPluginSrc) \
-	$(strip $(wildcard $(LLVM_SRC_ROOT)/include/llvm/CompilerDriver/*.td))
+$(INCTMPFiles) : $(TBLGEN) $(TDFiles)
 
-$(ObjDir)/AutoGenerated.inc.tmp: $(LLVMCPluginSrc) $(ObjDir)/.dir \
-				$(TBLGEN) $(TD_COMMON)
-	$(Echo) "Building LLVMC configuration library with tblgen"
+$(ObjDir)/%.inc.tmp: %.td $(ObjDir)/.dir
+	$(Echo) "Building LLVMC compilation graph description with tblgen"
 	$(Verb) $(TableGen) -gen-llvmc -o $(call SYSPATH, $@) $<
 
-endif # LLVMC_BUILD_AUTOGENERATED_INC
+clean-local::
+	-$(Verb) $(RM) -f $(INCFiles)
+
+endif # LLVMC_BASED_DRIVER
 
 ###############################################################################
 # OTHER RULES: Other rules needed
@@ -1858,11 +1867,13 @@
 	  $(EchoCmd) No test directory ; \
 	fi
 
-check-lit::
+check-lit:: check
+
+check-dg::
 	$(Verb) if test -d "$(PROJ_OBJ_ROOT)/test" ; then \
 	  if test -f "$(PROJ_OBJ_ROOT)/test/Makefile" ; then \
 	    $(EchoCmd) Running test suite ; \
-	    $(MAKE) -C $(PROJ_OBJ_ROOT)/test check-local-lit ; \
+	    $(MAKE) -C $(PROJ_OBJ_ROOT)/test check-local-dg ; \
 	  else \
 	    $(EchoCmd) No Makefile in test directory ; \
 	  fi ; \

Modified: llvm/branches/wendling/eh/ModuleInfo.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/ModuleInfo.txt?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/ModuleInfo.txt (original)
+++ llvm/branches/wendling/eh/ModuleInfo.txt Tue Oct 26 19:48:03 2010
@@ -1,4 +1,4 @@
-DepModule: 
+DepModule:
 BuildCmd: ./build-for-llvm-top.sh
 CleanCmd: make clean -C ../build.llvm
 InstallCmd: make install -C ../build.llvm

Modified: llvm/branches/wendling/eh/autoconf/configure.ac
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/autoconf/configure.ac?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/autoconf/configure.ac (original)
+++ llvm/branches/wendling/eh/autoconf/configure.ac Tue Oct 26 19:48:03 2010
@@ -31,7 +31,7 @@
 dnl===-----------------------------------------------------------------------===
 dnl Initialize autoconf and define the package name, version number and
 dnl email address for reporting bugs.
-AC_INIT([[llvm]],[[2.8svn]],[llvmbugs at cs.uiuc.edu])
+AC_INIT([[llvm]],[[2.9svn]],[llvmbugs at cs.uiuc.edu])
 
 dnl Provide a copyright substitution and ensure the copyright notice is included
 dnl in the output of --version option of the generated configure script.
@@ -101,7 +101,6 @@
 do
   if test -d ${srcdir}/projects/${i} ; then
     case ${i} in
-      CVS) ;;
       sample)       AC_CONFIG_SUBDIRS([projects/sample])    ;;
       privbracket)  AC_CONFIG_SUBDIRS([projects/privbracket]) ;;
       llvm-stacker) AC_CONFIG_SUBDIRS([projects/llvm-stacker]) ;;
@@ -299,7 +298,7 @@
 AC_SUBST(LINKALL,$llvm_cv_link_all_option)
 AC_SUBST(NOLINKALL,$llvm_cv_no_link_all_option)
 
-dnl Set the "LLVM_ON_*" variables based on llvm_cvs_platform_type
+dnl Set the "LLVM_ON_*" variables based on llvm_cv_platform_type
 dnl This is used by lib/System to determine the basic kind of implementation
 dnl to use.
 case $llvm_cv_platform_type in
@@ -327,12 +326,12 @@
   alpha*-*)               llvm_cv_target_arch="Alpha" ;;
   arm*-*)                 llvm_cv_target_arch="ARM" ;;
   mips-*)                 llvm_cv_target_arch="Mips" ;;
-  pic16-*)                llvm_cv_target_arch="PIC16" ;;
   xcore-*)                llvm_cv_target_arch="XCore" ;;
   msp430-*)               llvm_cv_target_arch="MSP430" ;;
   s390x-*)                llvm_cv_target_arch="SystemZ" ;;
   bfin-*)                 llvm_cv_target_arch="Blackfin" ;;
   mblaze-*)               llvm_cv_target_arch="MBlaze" ;;
+  ptx-*)                  llvm_cv_target_arch="PTX" ;;
   *)                      llvm_cv_target_arch="Unknown" ;;
 esac])
 
@@ -369,13 +368,13 @@
   AC_SUBST(LLVM_CROSS_COMPILING, [0])
 fi
 
-dnl Check to see if there's a "CVS" (or .svn or .git) directory indicating
-dnl that this build is being done from a checkout. This sets up several
-dnl defaults for the command line switches. When we build with a CVS directory,
+dnl Check to see if there's a .svn or .git directory indicating that this
+dnl build is being done from a checkout. This sets up several defaults for
+dnl the command line switches. When we build with a checkout directory,
 dnl we get a debug with assertions turned on. Without, we assume a source
 dnl release and we get an optimized build without assertions.
 dnl See --enable-optimized and --enable-assertions below
-if test -d "CVS" -o -d "${srcdir}/CVS" -o -d ".svn" -o -d "${srcdir}/.svn" -o -d ".git" -o -d "${srcdir}/.git"; then
+if test -d ".svn" -o -d "${srcdir}/.svn" -o -d ".git" -o -d "${srcdir}/.git"; then
   cvsbuild="yes"
   optimize="no"
   AC_SUBST(CVSBUILD,[[CVSBUILD=1]])
@@ -464,12 +463,12 @@
     Alpha)       AC_SUBST(TARGET_HAS_JIT,1) ;;
     ARM)         AC_SUBST(TARGET_HAS_JIT,1) ;;
     Mips)        AC_SUBST(TARGET_HAS_JIT,0) ;;
-    PIC16)       AC_SUBST(TARGET_HAS_JIT,0) ;;
     XCore)       AC_SUBST(TARGET_HAS_JIT,0) ;;
     MSP430)      AC_SUBST(TARGET_HAS_JIT,0) ;;
     SystemZ)     AC_SUBST(TARGET_HAS_JIT,0) ;;
     Blackfin)    AC_SUBST(TARGET_HAS_JIT,0) ;;
     MBlaze)      AC_SUBST(TARGET_HAS_JIT,0) ;;
+    PTX)         AC_SUBST(TARGET_HAS_JIT,0) ;;
     *)           AC_SUBST(TARGET_HAS_JIT,0) ;;
   esac
 fi
@@ -543,14 +542,14 @@
 TARGETS_TO_BUILD=""
 AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
     [Build specific host targets: all or target1,target2,... Valid targets are:
-     host, x86, x86_64, sparc, powerpc, alpha, arm, mips, spu, pic16,
-     xcore, msp430, systemz, blackfin, cbe, msil, and cpp (default=all)]),,
+     host, x86, x86_64, sparc, powerpc, alpha, arm, mips, spu,
+     xcore, msp430, systemz, blackfin, ptx, cbe, and cpp (default=all)]),,
     enableval=all)
 if test "$enableval" = host-only ; then
   enableval=host
 fi
 case "$enableval" in
-  all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha ARM Mips CellSPU PIC16 XCore MSP430 SystemZ Blackfin CBackend MSIL CppBackend MBlaze" ;;
+  all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha ARM Mips CellSPU XCore MSP430 SystemZ Blackfin CBackend CppBackend MBlaze PTX" ;;
   *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do
       case "$a_target" in
         x86)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
@@ -561,15 +560,14 @@
         arm)      TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
         mips)     TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
         spu)      TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
-        pic16)    TARGETS_TO_BUILD="PIC16 $TARGETS_TO_BUILD" ;;
         xcore)    TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
         msp430)   TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
         systemz)  TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
         blackfin) TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
         cbe)      TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD" ;;
-        msil)     TARGETS_TO_BUILD="MSIL $TARGETS_TO_BUILD" ;;
         cpp)      TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;;
         mblaze)   TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
+        ptx)      TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
         host) case "$llvm_cv_target_arch" in
             x86)         TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
             x86_64)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
@@ -580,11 +578,11 @@
             Mips)        TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
             MBlaze)      TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
             CellSPU|SPU) TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
-            PIC16)       TARGETS_TO_BUILD="PIC16 $TARGETS_TO_BUILD" ;;
             XCore)       TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
             MSP430)      TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
             s390x)       TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
             Blackfin)    TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
+            PTX)         TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
             *)       AC_MSG_ERROR([Can not set target to build]) ;;
           esac ;;
         *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
@@ -598,9 +596,17 @@
 # If so, define LLVM_NATIVE_ARCH to that LLVM target.
 for a_target in $TARGETS_TO_BUILD; do
   if test "$a_target" = "$LLVM_NATIVE_ARCH"; then
-    LLVM_NATIVE_ARCHTARGET="${LLVM_NATIVE_ARCH}Target"
-    AC_DEFINE_UNQUOTED(LLVM_NATIVE_ARCH,$LLVM_NATIVE_ARCHTARGET,
+    AC_DEFINE_UNQUOTED(LLVM_NATIVE_ARCH, $LLVM_NATIVE_ARCH,
       [LLVM architecture name for the native architecture, if available])
+    LLVM_NATIVE_TARGET="LLVMInitialize${LLVM_NATIVE_ARCH}Target"
+    LLVM_NATIVE_TARGETINFO="LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo"
+    LLVM_NATIVE_ASMPRINTER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter"
+    AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGET, $LLVM_NATIVE_TARGET,
+      [LLVM name for the native Target init function, if available])
+    AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETINFO, $LLVM_NATIVE_TARGETINFO,
+      [LLVM name for the native TargetInfo init function, if available])
+    AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPRINTER, $LLVM_NATIVE_ASMPRINTER,
+      [LLVM name for the native AsmPrinter init function, if available])
   fi
 done
 
@@ -615,6 +621,10 @@
   if test -f ${srcdir}/lib/Target/${target_to_build}/AsmPrinter/Makefile ; then
     LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
   fi
+  # MC-ized AsmPrinters live in TARGET/InstPrinter, not AsmPrinter
+  if test -f ${srcdir}/lib/Target/${target_to_build}/InstPrinter/Makefile ; then
+    LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
+  fi
   if test -f ${srcdir}/lib/Target/${target_to_build}/AsmParser/Makefile ; then
     LLVM_ENUM_ASM_PARSERS="LLVM_ASM_PARSER($target_to_build) $LLVM_ENUM_ASM_PARSERS";
   fi
@@ -794,6 +804,13 @@
   *) AC_MSG_ERROR([Invalid path for --with-ocaml-libdir. Provide full path]) ;;
 esac
 
+AC_ARG_WITH(clang-resource-dir,
+  AS_HELP_STRING([--with-clang-resource-dir],
+    [Relative directory from the Clang binary for resource files]),,
+    withval="")
+AC_DEFINE_UNQUOTED(CLANG_RESOURCE_DIR,"$withval",
+                   [Relative directory for resource files])
+
 AC_ARG_WITH(c-include-dirs,
   AS_HELP_STRING([--with-c-include-dirs],
     [Colon separated list of directories clang will search for headers]),,
@@ -857,35 +874,6 @@
   esac],
   llvm_cv_enable_libffi=no)
 
-dnl Only Windows needs dynamic libCompilerDriver to support plugins.
-if test "$llvm_cv_os_type" = "Win32" ; then
-   llvmc_dynamic="yes"
-else
-   llvmc_dynamic="no"
-fi
-
-dnl --enable-llvmc-dynamic : should LLVMC link libCompilerDriver dynamically?
-AC_ARG_ENABLE(llvmc-dynamic,AS_HELP_STRING(
---enable-llvmc-dynamic,
-[Link LLVMC dynamically (default is NO, unless on Win32)]),,
-enableval=$llvmc_dynamic)
-if test ${enableval} = "yes" && test "$ENABLE_PIC" -eq 1 ; then
-   AC_SUBST(ENABLE_LLVMC_DYNAMIC,[[ENABLE_LLVMC_DYNAMIC=1]])
-else
-   AC_SUBST(ENABLE_LLVMC_DYNAMIC,[[]])
-fi
-
-dnl --enable-llvmc-dynamic-plugins : should LLVMC support dynamic plugins?
-AC_ARG_ENABLE(llvmc-dynamic-plugins,AS_HELP_STRING(
---enable-llvmc-dynamic-plugins,
-[Enable dynamic LLVMC plugins (default is YES)]),,
-enableval=yes)
-if test ${enableval} = "yes" ; then
-   AC_SUBST(ENABLE_LLVMC_DYNAMIC_PLUGINS,[[ENABLE_LLVMC_DYNAMIC_PLUGINS=1]])
-else
-   AC_SUBST(ENABLE_LLVMC_DYNAMIC_PLUGINS,[[]])
-fi
-
 dnl===-----------------------------------------------------------------------===
 dnl===
 dnl=== SECTION 4: Check for programs we need and that they are the right version
@@ -998,6 +986,16 @@
   AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
    [Define to path to dotty program if found or 'echo dotty' otherwise])
 fi
+AC_PATH_PROG(XDOT_PY, [xdot.py], [echo xdot.py])
+if test "$XDOT_PY" != "echo xdot.py" ; then
+  AC_DEFINE([HAVE_XDOT_PY],[1],[Define if the xdot.py program is available])
+  dnl If we're targeting for mingw we should emit windows paths, not msys
+  if test "$llvm_cv_os_type" = "MingW" ; then
+    XDOT_PY=`echo $XDOT_PY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
+  fi
+  AC_DEFINE_UNQUOTED([LLVM_PATH_XDOT_PY],"$XDOT_PY${EXEEXT}",
+   [Define to path to xdot.py program if found or 'echo xdot.py' otherwise])
+fi
 
 dnl Look for a sufficiently recent version of Perl.
 LLVM_PROG_PERL([5.006])
@@ -1040,6 +1038,9 @@
 AC_PATH_PROGS(OCAMLDOC, [ocamldoc])
 AC_PATH_PROGS(GAS, [gas as])
 
+dnl Get the version of the linker in use.
+AC_LINK_GET_VERSION
+
 dnl Determine whether the linker supports the -R option.
 AC_LINK_USE_R
 
@@ -1278,6 +1279,7 @@
 AC_CHECK_HEADERS([sys/mman.h sys/param.h sys/resource.h sys/time.h])
 AC_CHECK_HEADERS([sys/types.h sys/ioctl.h malloc/malloc.h mach/mach.h])
 AC_CHECK_HEADERS([valgrind/valgrind.h])
+AC_CHECK_HEADERS([fenv.h])
 if test "$ENABLE_THREADS" -eq 1 ; then
   AC_CHECK_HEADERS(pthread.h,
                    AC_SUBST(HAVE_PTHREAD, 1),
@@ -1294,9 +1296,6 @@
 dnl Try to find Darwin specific crash reporting library.
 AC_CHECK_HEADERS([CrashReporterClient.h])
 
-dnl Try to find Darwin specific linker-section library.
-AC_CHECK_HEADERS([mach-o/getsect.h])
-
 dnl===-----------------------------------------------------------------------===
 dnl===
 dnl=== SECTION 7: Check for types and structures
@@ -1376,23 +1375,6 @@
   AC_DEFINE(LLVM_MULTITHREADED, 0, Build multithreading support into LLVM)
   AC_MSG_WARN([LLVM will be built thread-unsafe because atomic builtins are missing]))
 
-dnl Check for Darwin-specific getsect().
-AC_MSG_CHECKING(for getsect())
-AC_COMPILE_IFELSE(
-  AC_LANG_SOURCE(
-    [[#include <mach-o/getsect.h>
-      int main() {
-        unsigned long p;
-        return (int)getsect("__DATA","__pass_info", &p);
-      }
-    ]]),
-  AC_MSG_RESULT(yes)
-    AC_DEFINE(HAVE_GETSECT, 1, Have Darwin getsect() support),
-  AC_MSG_RESULT(no)
-    AC_DEFINE(HAVE_GETSECT, 1, Have Darwin getsect() support)
-)
-
-
 dnl===-----------------------------------------------------------------------===
 dnl===
 dnl=== SECTION 9: Additional checks, variables, etc.
@@ -1579,7 +1561,11 @@
 dnl you MUST also update Makefile.rules so that the variable FilesToConfig
 dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
 dnl files can be updated automatically when their *.in sources change.
-AC_CONFIG_HEADERS([include/llvm/Config/config.h])
+AC_CONFIG_HEADERS([include/llvm/Config/config.h include/llvm/Config/llvm-config.h])
+AH_TOP([#ifndef CONFIG_H
+#define CONFIG_H])
+AH_BOTTOM([#endif])
+
 AC_CONFIG_FILES([include/llvm/Config/Targets.def])
 AC_CONFIG_FILES([include/llvm/Config/AsmPrinters.def])
 AC_CONFIG_FILES([include/llvm/Config/AsmParsers.def])
@@ -1593,7 +1579,7 @@
 AC_CONFIG_FILES([llvm.spec])
 
 dnl Configure llvmc's Base plugin
-AC_CONFIG_FILES([tools/llvmc/plugins/Base/Base.td])
+AC_CONFIG_FILES([tools/llvmc/src/Base.td])
 
 dnl Do the first stage of configuration for llvm-config.in.
 AC_CONFIG_FILES([tools/llvm-config/llvm-config.in])

Modified: llvm/branches/wendling/eh/autoconf/m4/link_options.m4
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/autoconf/m4/link_options.m4?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/autoconf/m4/link_options.m4 (original)
+++ llvm/branches/wendling/eh/autoconf/m4/link_options.m4 Tue Oct 26 19:48:03 2010
@@ -1,4 +1,25 @@
 #
+# Get the linker version string.
+#
+# This macro is specific to LLVM.
+#
+AC_DEFUN([AC_LINK_GET_VERSION],
+  [AC_CACHE_CHECK([for linker version],[llvm_cv_link_version],
+  [
+   version_string="$(ld -v 2>&1 | head -1)"
+
+   # Check for ld64.
+   if (echo "$version_string" | grep -q "ld64"); then
+     llvm_cv_link_version=$(echo "$version_string" | sed -e "s#.*ld64-\([^ ]*\)#\1#")
+   else
+     llvm_cv_link_version=$(echo "$version_string" | sed -e "s#[^0-9]*\([0-9.]*\).*#\1#")
+   fi
+  ])
+  AC_DEFINE_UNQUOTED([HOST_LINK_VERSION],"$llvm_cv_link_version",
+                     [Linker version detected at compile time.])
+])
+
+#
 # Determine if the system can handle the -R option being passed to the linker.
 #
 # This macro is specific to LLVM.

Modified: llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.ml?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.ml (original)
+++ llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.ml Tue Oct 26 19:48:03 2010
@@ -35,7 +35,6 @@
   | Opaque
   | Vector
   | Metadata
-  | Union
 end
 
 module Linkage = struct
@@ -210,11 +209,6 @@
                               = "llvm_struct_element_types"
 external is_packed : lltype -> bool = "llvm_is_packed"
 
-(*--... Operations on union types ..........................................--*)
-external union_type : llcontext -> lltype array -> lltype = "llvm_union_type"
-external union_element_types : lltype -> lltype array
-                             = "llvm_union_element_types"
-
 (*--... Operations on pointer, vector, and array types .....................--*)
 external array_type : lltype -> int -> lltype = "llvm_array_type"
 external pointer_type : lltype -> lltype = "llvm_pointer_type"
@@ -280,6 +274,8 @@
 
 (*--... Operations on users ................................................--*)
 external operand : llvalue -> int -> llvalue = "llvm_operand"
+external set_operand : llvalue -> int -> llvalue -> unit = "llvm_set_operand"
+external num_operands : llvalue -> int = "llvm_num_operands"
 
 (*--... Operations on constants of (mostly) any type .......................--*)
 external is_constant : llvalue -> bool = "llvm_is_constant"
@@ -319,7 +315,6 @@
 external const_packed_struct : llcontext -> llvalue array -> llvalue
                              = "llvm_const_packed_struct"
 external const_vector : llvalue array -> llvalue = "llvm_const_vector"
-external const_union : lltype -> llvalue -> llvalue = "LLVMConstUnion"
 
 (*--... Constant expressions ...............................................--*)
 external align_of : lltype -> llvalue = "LLVMAlignOf"
@@ -1050,9 +1045,6 @@
       if is_packed ty
         then "<" ^ s ^ ">"
         else s
-  | TypeKind.Union -> "union { " ^ (concat2 ", " (
-                        Array.map string_of_lltype (union_element_types ty)
-                      )) ^ " }"
   | TypeKind.Array -> "["   ^ (string_of_int (array_length ty)) ^
                       " x " ^ (string_of_lltype (element_type ty)) ^ "]"
   | TypeKind.Vector -> "<"   ^ (string_of_int (vector_size ty)) ^

Modified: llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.mli
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.mli?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.mli (original)
+++ llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm.mli Tue Oct 26 19:48:03 2010
@@ -72,7 +72,6 @@
   | Opaque
   | Vector
   | Metadata
-  | Union
 end
 
 (** The linkage of a global value, accessed with {!linkage} and
@@ -408,19 +407,6 @@
 external is_packed : lltype -> bool = "llvm_is_packed"
 
 
-(** {7 Operations on union types} *)
-
-(** [union_type context tys] returns the union type in the context [context]
-    containing the types in the array [tys]. See the method
-    [llvm::UnionType::get] *)
-external union_type : llcontext -> lltype array -> lltype = "llvm_union_type"
-
-(** [union_element_types uty] returns the constituent types of the union type
-    [uty]. See the method [llvm::UnionType::getElementType]. *)
-external union_element_types : lltype -> lltype array
-                             = "llvm_union_element_types"
-
-
 (** {7 Operations on pointer, vector, and array types} *)
 
 (** [array_type ty n] returns the array type containing [n] elements of type
@@ -557,6 +543,14 @@
     method [llvm::User::getOperand]. *)
 external operand : llvalue -> int -> llvalue = "llvm_operand"
 
+(** [set_operand v i o] sets the operand of the value [v] at the index [i] to
+    the value [o].
+    See the method [llvm::User::setOperand]. *)
+external set_operand : llvalue -> int -> llvalue -> unit = "llvm_set_operand"
+
+(** [num_operands v] returns the number of operands for the value [v].
+    See the method [llvm::User::getNumOperands]. *)
+external num_operands : llvalue -> int = "llvm_num_operands"
 
 (** {7 Operations on constants of (mostly) any type} *)
 
@@ -689,10 +683,6 @@
     values [elts]. See the method [llvm::ConstantVector::get]. *)
 external const_vector : llvalue array -> llvalue = "llvm_const_vector"
 
-(** [const_union ty v] returns the union constant of type [union_type tys] and
-    containing the value [v]. See the method [llvm::ConstantUnion::get]. *)
-external const_union : lltype -> llvalue -> llvalue = "LLVMConstUnion"
-
 
 (** {7 Constant expressions} *)
 
@@ -991,7 +981,7 @@
                              = "LLVMConstInsertElement"
 
 (** [const_shufflevector a b mask] returns a constant [shufflevector].
-    See the LLVM Language Reference for details on the [sufflevector]
+    See the LLVM Language Reference for details on the [shufflevector]
     instruction.
     See the method [llvm::ConstantExpr::getShuffleVector]. *)
 external const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue

Modified: llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm_ocaml.c
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm_ocaml.c?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm_ocaml.c (original)
+++ llvm/branches/wendling/eh/bindings/ocaml/llvm/llvm_ocaml.c Tue Oct 26 19:48:03 2010
@@ -264,6 +264,11 @@
   return LLVMPPCFP128TypeInContext(Context);
 }
 
+/* llcontext -> lltype */
+CAMLprim LLVMTypeRef llvm_x86mmx_type(LLVMContextRef Context) {
+  return LLVMX86MMXTypeInContext(Context);
+}
+
 /*--... Operations on function types .......................................--*/
 
 /* lltype -> lltype array -> lltype */
@@ -318,21 +323,6 @@
   return Val_bool(LLVMIsPackedStruct(StructTy));
 }
 
-/*--... Operations on union types ..........................................--*/
-
-/* llcontext -> lltype array -> lltype */
-CAMLprim LLVMTypeRef llvm_union_type(LLVMContextRef C, value ElementTypes) {
-  return LLVMUnionTypeInContext(C, (LLVMTypeRef *) ElementTypes,
-                                Wosize_val(ElementTypes));
-}
-
-/* lltype -> lltype array */
-CAMLprim value llvm_union_element_types(LLVMTypeRef UnionTy) {
-  value Tys = alloc(LLVMCountUnionElementTypes(UnionTy), 0);
-  LLVMGetUnionElementTypes(UnionTy, (LLVMTypeRef *) Tys);
-  return Tys;
-}
-
 /*--... Operations on array, pointer, and vector types .....................--*/
 
 /* lltype -> int -> lltype */
@@ -452,6 +442,17 @@
   return LLVMGetOperand(V, Int_val(I));
 }
 
+/* llvalue -> int -> llvalue -> unit */
+CAMLprim value llvm_set_operand(LLVMValueRef U, value I, LLVMValueRef V) {
+  LLVMSetOperand(U, Int_val(I), V);
+  return Val_unit;
+}
+
+/* llvalue -> int */
+CAMLprim value llvm_num_operands(LLVMValueRef V) {
+  return Val_int(LLVMGetNumOperands(V));
+}
+
 /*--... Operations on constants of (mostly) any type .......................--*/
 
 /* llvalue -> bool */
@@ -964,8 +965,8 @@
   return LLVMGetParam(Fn, Int_val(Index));
 }
 
-/* llvalue -> int -> llvalue */
-CAMLprim value llvm_params(LLVMValueRef Fn, value Index) {
+/* llvalue -> llvalue */
+CAMLprim value llvm_params(LLVMValueRef Fn) {
   value Params = alloc(LLVMCountParams(Fn), 0);
   LLVMGetParams(Fn, (LLVMValueRef *) Op_val(Params));
   return Params;

Modified: llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.ml?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.ml (original)
+++ llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.ml Tue Oct 26 19:48:03 2010
@@ -39,9 +39,6 @@
 external add_loop_rotation : [<Llvm.PassManager.any] Llvm.PassManager.t
                              -> unit
                            = "llvm_add_loop_rotation"
-external add_loop_index_split : [<Llvm.PassManager.any] Llvm.PassManager.t
-                                -> unit
-                              = "llvm_add_loop_index_split"
 external
 add_memory_to_register_promotion : [<Llvm.PassManager.any] Llvm.PassManager.t
                                    -> unit

Modified: llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.mli
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.mli?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.mli (original)
+++ llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/llvm_scalar_opts.mli Tue Oct 26 19:48:03 2010
@@ -66,11 +66,6 @@
                              -> unit
                            = "llvm_add_loop_rotation"
 
-(** See the [llvm::createLoopIndexSplitPass] function. *)
-external add_loop_index_split : [<Llvm.PassManager.any] Llvm.PassManager.t
-                                -> unit
-                              = "llvm_add_loop_index_split"
-
 (** See the [llvm::createPromoteMemoryToRegisterPass] function. *)
 external
 add_memory_to_register_promotion : [<Llvm.PassManager.any] Llvm.PassManager.t

Modified: llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/scalar_opts_ocaml.c
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/scalar_opts_ocaml.c?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/scalar_opts_ocaml.c (original)
+++ llvm/branches/wendling/eh/bindings/ocaml/transforms/scalar/scalar_opts_ocaml.c Tue Oct 26 19:48:03 2010
@@ -86,12 +86,6 @@
 }
 
 /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */
-CAMLprim value llvm_add_loop_index_split(LLVMPassManagerRef PM) {
-  LLVMAddLoopIndexSplitPass(PM);
-  return Val_unit;
-}
-
-/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */
 CAMLprim value llvm_add_memory_to_register_promotion(LLVMPassManagerRef PM) {
   LLVMAddPromoteMemoryToRegisterPass(PM);
   return Val_unit;

Modified: llvm/branches/wendling/eh/cmake/config-ix.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/cmake/config-ix.cmake?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/cmake/config-ix.cmake (original)
+++ llvm/branches/wendling/eh/cmake/config-ix.cmake Tue Oct 26 19:48:03 2010
@@ -3,6 +3,7 @@
 include(CheckSymbolExists)
 include(CheckFunctionExists)
 include(CheckCXXSourceCompiles)
+include(TestBigEndian)
 
 if( UNIX AND NOT BEOS )
   # Used by check_symbol_exists:
@@ -69,6 +70,7 @@
 check_include_file(utime.h HAVE_UTIME_H)
 check_include_file(valgrind/valgrind.h HAVE_VALGRIND_VALGRIND_H)
 check_include_file(windows.h HAVE_WINDOWS_H)
+check_include_file(fenv.h HAVE_FENV_H)
 
 # library checks
 if( NOT LLVM_ON_WIN32 )
@@ -164,6 +166,8 @@
   check_cxx_compiler_flag("-fPIC" SUPPORTS_FPIC_FLAG)
 endif()
 
+check_cxx_compiler_flag("-Wno-variadic-macros" SUPPORTS_NO_VARIADIC_MACROS_FLAG)
+
 include(GetTargetTriple)
 get_target_triple(LLVM_HOSTTRIPLE)
 
@@ -194,26 +198,27 @@
   set(LLVM_NATIVE_ARCH ARM)
 elseif (LLVM_NATIVE_ARCH MATCHES "mips")
   set(LLVM_NATIVE_ARCH Mips)
-elseif (LLVM_NATIVE_ARCH MATCHES "pic16")
-  set(LLVM_NATIVE_ARCH "PIC16")
 elseif (LLVM_NATIVE_ARCH MATCHES "xcore")
   set(LLVM_NATIVE_ARCH XCore)
 elseif (LLVM_NATIVE_ARCH MATCHES "msp430")
   set(LLVM_NATIVE_ARCH MSP430)
 else ()
-  message(STATUS 
+  message(STATUS
     "Unknown architecture ${LLVM_NATIVE_ARCH}; lli will not JIT code")
   set(LLVM_NATIVE_ARCH)
 endif ()
-  
+
 if (LLVM_NATIVE_ARCH)
   list(FIND LLVM_TARGETS_TO_BUILD ${LLVM_NATIVE_ARCH} NATIVE_ARCH_IDX)
   if (NATIVE_ARCH_IDX EQUAL -1)
-    message(STATUS 
+    message(STATUS
       "Native target ${LLVM_NATIVE_ARCH} is not selected; lli will not JIT code")
     set(LLVM_NATIVE_ARCH)
   else ()
     message(STATUS "Native target architecture is ${LLVM_NATIVE_ARCH}")
+    set(LLVM_NATIVE_TARGET LLVMInitialize${LLVM_NATIVE_ARCH}Target)
+    set(LLVM_NATIVE_TARGETINFO LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo)
+    set(LLVM_NATIVE_ASMPRINTER LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter)
   endif ()
 endif()
 
@@ -259,12 +264,19 @@
   message(STATUS "Threads disabled.")
 endif()
 
+set(LLVM_PREFIX ${CMAKE_INSTALL_PREFIX})
+
 configure_file(
   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/config.h.cmake
   ${LLVM_BINARY_DIR}/include/llvm/Config/config.h
   )
 
 configure_file(
+  ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/llvm-config.h.cmake
+  ${LLVM_BINARY_DIR}/include/llvm/Config/llvm-config.h
+  )
+
+configure_file(
   ${LLVM_MAIN_INCLUDE_DIR}/llvm/System/DataTypes.h.cmake
   ${LLVM_BINARY_DIR}/include/llvm/System/DataTypes.h
   )

Modified: llvm/branches/wendling/eh/cmake/modules/AddLLVM.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/cmake/modules/AddLLVM.cmake?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/cmake/modules/AddLLVM.cmake (original)
+++ llvm/branches/wendling/eh/cmake/modules/AddLLVM.cmake Tue Oct 26 19:48:03 2010
@@ -9,6 +9,12 @@
   if( LLVM_COMMON_DEPENDS )
     add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} )
   endif( LLVM_COMMON_DEPENDS )
+
+  if( BUILD_SHARED_LIBS )
+    get_system_libs(sl)
+    target_link_libraries( ${name} ${sl} )
+  endif()
+
   install(TARGETS ${name}
     LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
     ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
@@ -23,7 +29,7 @@
 
 
 macro(add_llvm_loadable_module name)
-  if( NOT LLVM_ON_UNIX )
+  if( NOT LLVM_ON_UNIX OR CYGWIN )
     message(STATUS "Loadable modules not supported on this platform.
 ${name} ignored.")
   else()
@@ -60,13 +66,15 @@
   if( LLVM_LINK_COMPONENTS )
     llvm_config(${name} ${LLVM_LINK_COMPONENTS})
   endif( LLVM_LINK_COMPONENTS )
-  get_system_libs(llvm_system_libs)
-  if( llvm_system_libs )
-    target_link_libraries(${name} ${llvm_system_libs})
-  endif()
   if( LLVM_COMMON_DEPENDS )
     add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} )
   endif( LLVM_COMMON_DEPENDS )
+  if( NOT MINGW )
+    get_system_libs(llvm_system_libs)
+    if( llvm_system_libs )
+      target_link_libraries(${name} ${llvm_system_libs})
+    endif()
+  endif()
 endmacro(add_llvm_executable name)
 
 

Modified: llvm/branches/wendling/eh/cmake/modules/GetTargetTriple.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/cmake/modules/GetTargetTriple.cmake?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/cmake/modules/GetTargetTriple.cmake (original)
+++ llvm/branches/wendling/eh/cmake/modules/GetTargetTriple.cmake Tue Oct 26 19:48:03 2010
@@ -9,7 +9,11 @@
       set( value "i686-pc-win32" )
     endif()
   elseif( MINGW AND NOT MSYS )
-    set( value "i686-pc-mingw32" )
+    if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+      set( value "x86_64-w64-mingw32" )
+    else()
+      set( value "i686-pc-mingw32" )
+    endif()
   else( MSVC )
     set(config_guess ${LLVM_MAIN_SRC_DIR}/autoconf/config.guess)
     execute_process(COMMAND sh ${config_guess}

Modified: llvm/branches/wendling/eh/cmake/modules/LLVMProcessSources.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/cmake/modules/LLVMProcessSources.cmake?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/cmake/modules/LLVMProcessSources.cmake (original)
+++ llvm/branches/wendling/eh/cmake/modules/LLVMProcessSources.cmake Tue Oct 26 19:48:03 2010
@@ -36,6 +36,19 @@
     add_td_sources(sources)
     add_header_files(sources)
   endif()
+
+  # Set common compiler options:
+  if( NOT LLVM_REQUIRES_EH )
+    if( CMAKE_COMPILER_IS_GNUCXX )
+      add_definitions( -fno-exceptions )
+    endif()
+  endif()
+  if( NOT LLVM_REQUIRES_RTTI )
+    if( CMAKE_COMPILER_IS_GNUCXX )
+      add_definitions( -fno-rtti )
+    endif()
+  endif()
+
   set( ${OUT_VAR} ${sources} PARENT_SCOPE )
 endfunction(llvm_process_sources)
 

Modified: llvm/branches/wendling/eh/cmake/modules/TableGen.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/cmake/modules/TableGen.cmake?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/cmake/modules/TableGen.cmake (original)
+++ llvm/branches/wendling/eh/cmake/modules/TableGen.cmake Tue Oct 26 19:48:03 2010
@@ -12,14 +12,25 @@
     set(LLVM_TARGET_DEFINITIONS_ABSOLUTE 
       ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS})
   endif()
-  add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
+  add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
+    # Generate tablegen output in a temporary file.
     COMMAND ${LLVM_TABLEGEN_EXE} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR}
     -I ${LLVM_MAIN_SRC_DIR}/lib/Target -I ${LLVM_MAIN_INCLUDE_DIR}
     ${LLVM_TARGET_DEFINITIONS_ABSOLUTE} 
-    -o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
+    -o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
     DEPENDS tblgen ${local_tds} ${global_tds}
     COMMENT "Building ${ofn}..."
     )
+  add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
+    # Only update the real output file if there are any differences.
+    # This prevents recompilation of all the files depending on it if there
+    # aren't any.
+    COMMAND ${CMAKE_COMMAND} -E copy_if_different
+        ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
+        ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
+    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
+    COMMENT ""
+    )
   set(TABLEGEN_OUTPUT ${TABLEGEN_OUTPUT} ${CMAKE_CURRENT_BINARY_DIR}/${ofn})
   set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${ofn} 
     PROPERTIES GENERATED 1)

Modified: llvm/branches/wendling/eh/configure
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/configure?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/configure (original)
+++ llvm/branches/wendling/eh/configure Tue Oct 26 19:48:03 2010
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.60 for llvm 2.8svn.
+# Generated by GNU Autoconf 2.60 for llvm 2.9svn.
 #
 # Report bugs to <llvmbugs at cs.uiuc.edu>.
 #
@@ -561,8 +561,8 @@
 # Identity of this package.
 PACKAGE_NAME='llvm'
 PACKAGE_TARNAME='-llvm-'
-PACKAGE_VERSION='2.8svn'
-PACKAGE_STRING='llvm 2.8svn'
+PACKAGE_VERSION='2.9svn'
+PACKAGE_STRING='llvm 2.9svn'
 PACKAGE_BUGREPORT='llvmbugs at cs.uiuc.edu'
 
 ac_unique_file="lib/VMCore/Module.cpp"
@@ -703,8 +703,6 @@
 OPTIMIZE_OPTION
 EXTRA_OPTIONS
 BINUTILS_INCDIR
-ENABLE_LLVMC_DYNAMIC
-ENABLE_LLVMC_DYNAMIC_PLUGINS
 CXX
 CXXFLAGS
 ac_ct_CXX
@@ -731,6 +729,7 @@
 CIRCO
 GV
 DOTTY
+XDOT_PY
 PERL
 HAVE_PERL
 INSTALL_PROGRAM
@@ -1320,7 +1319,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures llvm 2.8svn to adapt to many kinds of systems.
+\`configure' configures llvm 2.9svn to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1386,7 +1385,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of llvm 2.8svn:";;
+     short | recursive ) echo "Configuration of llvm 2.9svn:";;
    esac
   cat <<\_ACEOF
 
@@ -1416,17 +1415,13 @@
   --enable-targets        Build specific host targets: all or
                           target1,target2,... Valid targets are: host, x86,
                           x86_64, sparc, powerpc, alpha, arm, mips, spu,
-                          pic16, xcore, msp430, systemz, blackfin, cbe, msil,
-                          and cpp (default=all)
+                          xcore, msp430, systemz, blackfin, ptx, cbe, and cpp
+                          (default=all)
   --enable-cbe-printf-a   Enable C Backend output with hex floating point via
                           %a (default is YES)
   --enable-bindings       Build specific language bindings:
                           all,auto,none,{binding-name} (default=auto)
   --enable-libffi         Check for the presence of libffi (default is NO)
-  --enable-llvmc-dynamic  Link LLVMC dynamically (default is NO, unless on
-                          Win32)
-  --enable-llvmc-dynamic-plugins
-                          Enable dynamic LLVMC plugins (default is YES)
   --enable-ltdl-install   install libltdl
 
 Optional Packages:
@@ -1447,6 +1442,9 @@
   --with-extra-options    Specify additional options to compile LLVM with
   --with-ocaml-libdir     Specify install location for ocaml bindings (default
                           is stdlib)
+  --with-clang-resource-dir
+                          Relative directory from the Clang binary for
+                          resource files
   --with-c-include-dirs   Colon separated list of directories clang will
                           search for headers
   --with-cxx-include-root Directory with the libstdc++ headers.
@@ -1539,7 +1537,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-llvm configure 2.8svn
+llvm configure 2.9svn
 generated by GNU Autoconf 2.60
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1555,7 +1553,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by llvm $as_me 2.8svn, which was
+It was created by llvm $as_me 2.9svn, which was
 generated by GNU Autoconf 2.60.  Invocation command line was
 
   $ $0 $@
@@ -1988,7 +1986,6 @@
 do
   if test -d ${srcdir}/projects/${i} ; then
     case ${i} in
-      CVS) ;;
       sample)       subdirs="$subdirs projects/sample"
     ;;
       privbracket)  subdirs="$subdirs projects/privbracket"
@@ -2362,12 +2359,12 @@
   alpha*-*)               llvm_cv_target_arch="Alpha" ;;
   arm*-*)                 llvm_cv_target_arch="ARM" ;;
   mips-*)                 llvm_cv_target_arch="Mips" ;;
-  pic16-*)                llvm_cv_target_arch="PIC16" ;;
   xcore-*)                llvm_cv_target_arch="XCore" ;;
   msp430-*)               llvm_cv_target_arch="MSP430" ;;
   s390x-*)                llvm_cv_target_arch="SystemZ" ;;
   bfin-*)                 llvm_cv_target_arch="Blackfin" ;;
   mblaze-*)               llvm_cv_target_arch="MBlaze" ;;
+  ptx-*)                  llvm_cv_target_arch="PTX" ;;
   *)                      llvm_cv_target_arch="Unknown" ;;
 esac
 fi
@@ -4691,7 +4688,7 @@
 
 fi
 
-if test -d "CVS" -o -d "${srcdir}/CVS" -o -d ".svn" -o -d "${srcdir}/.svn" -o -d ".git" -o -d "${srcdir}/.git"; then
+if test -d ".svn" -o -d "${srcdir}/.svn" -o -d ".git" -o -d "${srcdir}/.git"; then
   cvsbuild="yes"
   optimize="no"
   CVSBUILD=CVSBUILD=1
@@ -4823,8 +4820,6 @@
  ;;
     Mips)        TARGET_HAS_JIT=0
  ;;
-    PIC16)       TARGET_HAS_JIT=0
- ;;
     XCore)       TARGET_HAS_JIT=0
  ;;
     MSP430)      TARGET_HAS_JIT=0
@@ -4835,6 +4830,8 @@
  ;;
     MBlaze)      TARGET_HAS_JIT=0
  ;;
+    PTX)         TARGET_HAS_JIT=0
+ ;;
     *)           TARGET_HAS_JIT=0
  ;;
   esac
@@ -4962,7 +4959,7 @@
   enableval=host
 fi
 case "$enableval" in
-  all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha ARM Mips CellSPU PIC16 XCore MSP430 SystemZ Blackfin CBackend MSIL CppBackend MBlaze" ;;
+  all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha ARM Mips CellSPU XCore MSP430 SystemZ Blackfin CBackend CppBackend MBlaze PTX" ;;
   *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do
       case "$a_target" in
         x86)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
@@ -4973,15 +4970,14 @@
         arm)      TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
         mips)     TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
         spu)      TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
-        pic16)    TARGETS_TO_BUILD="PIC16 $TARGETS_TO_BUILD" ;;
         xcore)    TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
         msp430)   TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
         systemz)  TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
         blackfin) TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
         cbe)      TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD" ;;
-        msil)     TARGETS_TO_BUILD="MSIL $TARGETS_TO_BUILD" ;;
         cpp)      TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;;
         mblaze)   TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
+        ptx)      TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
         host) case "$llvm_cv_target_arch" in
             x86)         TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
             x86_64)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
@@ -4992,11 +4988,11 @@
             Mips)        TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
             MBlaze)      TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
             CellSPU|SPU) TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
-            PIC16)       TARGETS_TO_BUILD="PIC16 $TARGETS_TO_BUILD" ;;
             XCore)       TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
             MSP430)      TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
             s390x)       TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
             Blackfin)    TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
+            PTX)         TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
             *)       { { echo "$as_me:$LINENO: error: Can not set target to build" >&5
 echo "$as_me: error: Can not set target to build" >&2;}
    { (exit 1); exit 1; }; } ;;
@@ -5015,10 +5011,27 @@
 # If so, define LLVM_NATIVE_ARCH to that LLVM target.
 for a_target in $TARGETS_TO_BUILD; do
   if test "$a_target" = "$LLVM_NATIVE_ARCH"; then
-    LLVM_NATIVE_ARCHTARGET="${LLVM_NATIVE_ARCH}Target"
 
 cat >>confdefs.h <<_ACEOF
-#define LLVM_NATIVE_ARCH $LLVM_NATIVE_ARCHTARGET
+#define LLVM_NATIVE_ARCH $LLVM_NATIVE_ARCH
+_ACEOF
+
+    LLVM_NATIVE_TARGET="LLVMInitialize${LLVM_NATIVE_ARCH}Target"
+    LLVM_NATIVE_TARGETINFO="LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo"
+    LLVM_NATIVE_ASMPRINTER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter"
+
+cat >>confdefs.h <<_ACEOF
+#define LLVM_NATIVE_TARGET $LLVM_NATIVE_TARGET
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define LLVM_NATIVE_TARGETINFO $LLVM_NATIVE_TARGETINFO
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define LLVM_NATIVE_ASMPRINTER $LLVM_NATIVE_ASMPRINTER
 _ACEOF
 
   fi
@@ -5035,6 +5048,10 @@
   if test -f ${srcdir}/lib/Target/${target_to_build}/AsmPrinter/Makefile ; then
     LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
   fi
+  # MC-ized AsmPrinters live in TARGET/InstPrinter, not AsmPrinter
+  if test -f ${srcdir}/lib/Target/${target_to_build}/InstPrinter/Makefile ; then
+    LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
+  fi
   if test -f ${srcdir}/lib/Target/${target_to_build}/AsmParser/Makefile ; then
     LLVM_ENUM_ASM_PARSERS="LLVM_ASM_PARSER($target_to_build) $LLVM_ENUM_ASM_PARSERS";
   fi
@@ -5265,6 +5282,20 @@
 esac
 
 
+# Check whether --with-clang-resource-dir was given.
+if test "${with_clang_resource_dir+set}" = set; then
+  withval=$with_clang_resource_dir;
+else
+  withval=""
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define CLANG_RESOURCE_DIR "$withval"
+_ACEOF
+
+
+
 # Check whether --with-c-include-dirs was given.
 if test "${with_c_include_dirs+set}" = set; then
   withval=$with_c_include_dirs;
@@ -5374,42 +5405,6 @@
 fi
 
 
-if test "$llvm_cv_os_type" = "Win32" ; then
-   llvmc_dynamic="yes"
-else
-   llvmc_dynamic="no"
-fi
-
-# Check whether --enable-llvmc-dynamic was given.
-if test "${enable_llvmc_dynamic+set}" = set; then
-  enableval=$enable_llvmc_dynamic;
-else
-  enableval=$llvmc_dynamic
-fi
-
-if test ${enableval} = "yes" && test "$ENABLE_PIC" -eq 1 ; then
-   ENABLE_LLVMC_DYNAMIC=ENABLE_LLVMC_DYNAMIC=1
-
-else
-   ENABLE_LLVMC_DYNAMIC=
-
-fi
-
-# Check whether --enable-llvmc-dynamic-plugins was given.
-if test "${enable_llvmc_dynamic_plugins+set}" = set; then
-  enableval=$enable_llvmc_dynamic_plugins;
-else
-  enableval=yes
-fi
-
-if test ${enableval} = "yes" ; then
-   ENABLE_LLVMC_DYNAMIC_PLUGINS=ENABLE_LLVMC_DYNAMIC_PLUGINS=1
-
-else
-   ENABLE_LLVMC_DYNAMIC_PLUGINS=
-
-fi
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -7856,6 +7851,62 @@
 _ACEOF
 
 fi
+# Extract the first word of "xdot.py", so it can be a program name with args.
+set dummy xdot.py; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_XDOT_PY+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $XDOT_PY in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XDOT_PY="$XDOT_PY" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_XDOT_PY="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_XDOT_PY" && ac_cv_path_XDOT_PY="echo xdot.py"
+  ;;
+esac
+fi
+XDOT_PY=$ac_cv_path_XDOT_PY
+if test -n "$XDOT_PY"; then
+  { echo "$as_me:$LINENO: result: $XDOT_PY" >&5
+echo "${ECHO_T}$XDOT_PY" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+if test "$XDOT_PY" != "echo xdot.py" ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_XDOT_PY 1
+_ACEOF
+
+    if test "$llvm_cv_os_type" = "MingW" ; then
+    XDOT_PY=`echo $XDOT_PY | sed 's/^\/\([A-Za-z]\)\//\1:\//' `
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define LLVM_PATH_XDOT_PY "$XDOT_PY${EXEEXT}"
+_ACEOF
+
+fi
 
 
 # Extract the first word of "perl", so it can be a program name with args.
@@ -8725,6 +8776,31 @@
 done
 
 
+{ echo "$as_me:$LINENO: checking for linker version" >&5
+echo $ECHO_N "checking for linker version... $ECHO_C" >&6; }
+if test "${llvm_cv_link_version+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+   version_string="$(ld -v 2>&1 | head -1)"
+
+   # Check for ld64.
+   if (echo "$version_string" | grep -q "ld64"); then
+     llvm_cv_link_version=$(echo "$version_string" | sed -e "s#.*ld64-\([^ ]*\)#\1#")
+   else
+     llvm_cv_link_version=$(echo "$version_string" | sed -e "s#[^0-9]*\([0-9.]*\).*#\1#")
+   fi
+
+fi
+{ echo "$as_me:$LINENO: result: $llvm_cv_link_version" >&5
+echo "${ECHO_T}$llvm_cv_link_version" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HOST_LINK_VERSION "$llvm_cv_link_version"
+_ACEOF
+
+
+
 { echo "$as_me:$LINENO: checking for compiler -Wl,-R<path> option" >&5
 echo $ECHO_N "checking for compiler -Wl,-R<path> option... $ECHO_C" >&6; }
 if test "${llvm_cv_link_use_r+set}" = set; then
@@ -11391,7 +11467,7 @@
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 11394 "configure"
+#line 11470 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -16601,9 +16677,8 @@
 
 done
 
-if test "$ENABLE_THREADS" -eq 1 ; then
 
-for ac_header in pthread.h
+for ac_header in fenv.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -16766,24 +16841,14 @@
   cat >>confdefs.h <<_ACEOF
 #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
- HAVE_PTHREAD=1
-
-else
-  HAVE_PTHREAD=0
 
 fi
 
 done
 
-else
-  HAVE_PTHREAD=0
-
-fi
-
-if test "$llvm_cv_enable_libffi" = "yes" ; then
-
+if test "$ENABLE_THREADS" -eq 1 ; then
 
-for ac_header in ffi.h ffi/ffi.h
+for ac_header in pthread.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -16946,15 +17011,24 @@
   cat >>confdefs.h <<_ACEOF
 #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
+ HAVE_PTHREAD=1
+
+else
+  HAVE_PTHREAD=0
 
 fi
 
 done
 
+else
+  HAVE_PTHREAD=0
+
 fi
 
+if test "$llvm_cv_enable_libffi" = "yes" ; then
+
 
-for ac_header in CrashReporterClient.h
+for ac_header in ffi.h ffi/ffi.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -17122,9 +17196,10 @@
 
 done
 
+fi
 
 
-for ac_header in mach-o/getsect.h
+for ac_header in CrashReporterClient.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -20252,79 +20327,6 @@
 rm -f core conftest.err conftest.$ac_objext \
       conftest$ac_exeext conftest.$ac_ext
 
-{ echo "$as_me:$LINENO: checking for getsect()" >&5
-echo $ECHO_N "checking for getsect()... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <mach-o/getsect.h>
-      int main() {
-        unsigned long p;
-        return (int)getsect("__DATA","__pass_info", &p);
-      }
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETSECT 1
-_ACEOF
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETSECT 1
-_ACEOF
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
 
 if test "$llvm_cv_os_type" = "Linux" -a "$llvm_cv_target_arch" = "x86_64" ; then
   { echo "$as_me:$LINENO: checking for 32-bit userspace on 64-bit system" >&5
@@ -20821,7 +20823,12 @@
 
 
 
-ac_config_headers="$ac_config_headers include/llvm/Config/config.h"
+ac_config_headers="$ac_config_headers include/llvm/Config/config.h include/llvm/Config/llvm-config.h"
+
+
+
+
+
 
 ac_config_files="$ac_config_files include/llvm/Config/Targets.def"
 
@@ -20840,7 +20847,7 @@
 ac_config_files="$ac_config_files llvm.spec"
 
 
-ac_config_files="$ac_config_files tools/llvmc/plugins/Base/Base.td"
+ac_config_files="$ac_config_files tools/llvmc/src/Base.td"
 
 
 ac_config_files="$ac_config_files tools/llvm-config/llvm-config.in"
@@ -21285,7 +21292,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by llvm $as_me 2.8svn, which was
+This file was extended by llvm $as_me 2.9svn, which was
 generated by GNU Autoconf 2.60.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -21338,7 +21345,7 @@
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-llvm config.status 2.8svn
+llvm config.status 2.9svn
 configured by $0, generated by GNU Autoconf 2.60,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
@@ -21452,6 +21459,7 @@
 do
   case $ac_config_target in
     "include/llvm/Config/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/llvm/Config/config.h" ;;
+    "include/llvm/Config/llvm-config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/llvm/Config/llvm-config.h" ;;
     "include/llvm/Config/Targets.def") CONFIG_FILES="$CONFIG_FILES include/llvm/Config/Targets.def" ;;
     "include/llvm/Config/AsmPrinters.def") CONFIG_FILES="$CONFIG_FILES include/llvm/Config/AsmPrinters.def" ;;
     "include/llvm/Config/AsmParsers.def") CONFIG_FILES="$CONFIG_FILES include/llvm/Config/AsmParsers.def" ;;
@@ -21459,7 +21467,7 @@
     "include/llvm/System/DataTypes.h") CONFIG_HEADERS="$CONFIG_HEADERS include/llvm/System/DataTypes.h" ;;
     "Makefile.config") CONFIG_FILES="$CONFIG_FILES Makefile.config" ;;
     "llvm.spec") CONFIG_FILES="$CONFIG_FILES llvm.spec" ;;
-    "tools/llvmc/plugins/Base/Base.td") CONFIG_FILES="$CONFIG_FILES tools/llvmc/plugins/Base/Base.td" ;;
+    "tools/llvmc/src/Base.td") CONFIG_FILES="$CONFIG_FILES tools/llvmc/src/Base.td" ;;
     "tools/llvm-config/llvm-config.in") CONFIG_FILES="$CONFIG_FILES tools/llvm-config/llvm-config.in" ;;
     "setup") CONFIG_COMMANDS="$CONFIG_COMMANDS setup" ;;
     "Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;;
@@ -21679,8 +21687,6 @@
 OPTIMIZE_OPTION!$OPTIMIZE_OPTION$ac_delim
 EXTRA_OPTIONS!$EXTRA_OPTIONS$ac_delim
 BINUTILS_INCDIR!$BINUTILS_INCDIR$ac_delim
-ENABLE_LLVMC_DYNAMIC!$ENABLE_LLVMC_DYNAMIC$ac_delim
-ENABLE_LLVMC_DYNAMIC_PLUGINS!$ENABLE_LLVMC_DYNAMIC_PLUGINS$ac_delim
 CXX!$CXX$ac_delim
 CXXFLAGS!$CXXFLAGS$ac_delim
 ac_ct_CXX!$ac_ct_CXX$ac_delim
@@ -21707,6 +21713,7 @@
 CIRCO!$CIRCO$ac_delim
 GV!$GV$ac_delim
 DOTTY!$DOTTY$ac_delim
+XDOT_PY!$XDOT_PY$ac_delim
 PERL!$PERL$ac_delim
 HAVE_PERL!$HAVE_PERL$ac_delim
 INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
@@ -21772,7 +21779,7 @@
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 95; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 94; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5

Modified: llvm/branches/wendling/eh/docs/AliasAnalysis.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/AliasAnalysis.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/AliasAnalysis.html (original)
+++ llvm/branches/wendling/eh/docs/AliasAnalysis.html Tue Oct 26 19:48:03 2010
@@ -238,10 +238,10 @@
 
 <p>The <tt>AliasAnalysis</tt> class also provides a <tt>getModRefInfo</tt>
 method for testing dependencies between function calls.  This method takes two
-call sites (CS1 & CS2), returns NoModRef if the two calls refer to disjoint
-memory locations, Ref if CS1 reads memory written by CS2, Mod if CS1 writes to
-memory read or written by CS2, or ModRef if CS1 might read or write memory
-accessed by CS2.  Note that this relation is not commutative.</p>
+call sites (CS1 & CS2), returns NoModRef if neither call writes to memory
+read or written by the other, Ref if CS1 reads memory written by CS2, Mod if CS1
+writes to memory read or written by CS2, or ModRef if CS1 might read or write
+memory written to by CS2.  Note that this relation is not commutative.</p>
 
 </div>
 

Modified: llvm/branches/wendling/eh/docs/BitCodeFormat.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/BitCodeFormat.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/BitCodeFormat.html (original)
+++ llvm/branches/wendling/eh/docs/BitCodeFormat.html Tue Oct 26 19:48:03 2010
@@ -1367,21 +1367,6 @@
 </p>
 </div>
 
-<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_UNION">TYPE_CODE_UNION Record</a>
-</div>
-
-<div class="doc_text">
-
-<p><tt>[UNION, ...eltty...]</tt></p>
-
-<p>The <tt>UNION</tt> record (code 17) adds a <tt>union</tt> type to
-the type table. The <i>eltty</i> operand fields are zero or more type
-indices representing the element types of the union.
-</p>
-
-</div>
-
 <!-- ======================================================================= -->
 <div class="doc_subsection"><a name="CONSTANTS_BLOCK">CONSTANTS_BLOCK Contents</a>
 </div>

Modified: llvm/branches/wendling/eh/docs/CMake.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/CMake.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/CMake.html (original)
+++ llvm/branches/wendling/eh/docs/CMake.html Tue Oct 26 19:48:03 2010
@@ -257,11 +257,21 @@
     with a makefile-based system executing <i>make llvm-as</i> on the
     root of your build directory.</dd>
 
+  <dt><b>LLVM_INCLUDE_TOOLS</b>:BOOL</dt>
+  <dd>Generate build targets for the LLVM tools. Defaults to
+    ON. You can use that option for disabling the generation of build
+    targets for the LLVM tools.</dd>
+
   <dt><b>LLVM_BUILD_EXAMPLES</b>:BOOL</dt>
   <dd>Build LLVM examples. Defaults to OFF. Targets for building each
     example are generated in any case. See documentation
     for <i>LLVM_BUILD_TOOLS</i> above for more details.</dd>
 
+  <dt><b>LLVM_INCLUDE_EXAMPLES</b>:BOOL</dt>
+  <dd>Generate build targets for the LLVM examples. Defaults to
+    ON. You can use that option for disabling the generation of build
+    targets for the LLVM examples.</dd>
+
   <dt><b>LLVM_ENABLE_THREADS</b>:BOOL</dt>
   <dd>Build with threads support, if available. Defaults to ON.</dd>
 
@@ -313,9 +323,15 @@
 
 <div class="doc_text">
 
-<p>LLVM testing is not supported on Visual Studio.</p>
+<p>Testing is performed when the <i>check</i> target is built. For
+  instance, if you are using makefiles, execute this command while on
+  the top level of your build directory:</p>
+
+<div class="doc_code">
+  <p><tt>make check</tt></p>
+</div>
 
-<p>TODO</p>
+<p>Testing is not supported on Visual Studio.</p>
 
 </div>
 
@@ -348,7 +364,38 @@
 
 <div class="doc_text">
 
-<p>TODO</p>
+  <p>The most difficult part of adding LLVM to the build of a project
+    is to determine the set of LLVM libraries corresponding to the set
+    of required LLVM features. What follows is an example of how to
+    obtain this information:</p>
+
+  <div class="doc_code">
+    <pre>
+    <b># A convenience variable:</b>
+    set(LLVM_ROOT "" CACHE PATH "Root of LLVM install.")
+    <b># A bit of a sanity check:</b>
+    if( NOT EXISTS ${LLVM_ROOT}/include/llvm )
+    message(FATAL_ERROR "LLVM_ROOT (${LLVM_ROOT}) is not a valid LLVM install")
+    endif()
+    <b># We incorporate the CMake features provided by LLVM:</b>
+    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LLVM_ROOT}/share/llvm/cmake")
+    include(LLVM)
+    <b># Now set the header and library paths:</b>
+    include_directories( ${LLVM_ROOT}/include )
+    link_directories( ${LLVM_ROOT}/lib )
+    <b># Let's suppose we want to build a JIT compiler with support for
+    # binary code (no interpreter):</b>
+    llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native)
+    <b># Finally, we link the LLVM libraries to our executable:</b>
+    target_link_libraries(mycompiler ${REQ_LLVM_LIBRARIES})
+    </pre>
+  </div>
+
+  <p>This assumes that LLVM_ROOT points to an install of LLVM. The
+    procedure works too for uninstalled builds although we need to take
+    care to add an <i>include_directories</i> for the location of the
+    headers on the LLVM source directory (if we are building
+    out-of-source.)</p>
 
 </div>
 
@@ -377,7 +424,7 @@
 
   <a href="mailto:ofv at wanadoo.es">Oscar Fuentes</a><br>
   <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
-  Last modified: $Date: 2008-12-31 03:59:36 +0100 (Wed, 31 Dec 2008) $
+  Last modified: $Date: 2010-08-09 03:59:36 +0100 (Mon, 9 Aug 2010) $
 </address>
 
 </body>

Modified: llvm/branches/wendling/eh/docs/CodeGenerator.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/CodeGenerator.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/CodeGenerator.html (original)
+++ llvm/branches/wendling/eh/docs/CodeGenerator.html Tue Oct 26 19:48:03 2010
@@ -33,7 +33,7 @@
       <li><a href="#targetjitinfo">The <tt>TargetJITInfo</tt> class</a></li>
     </ul>
   </li>
-  <li><a href="#codegendesc">Machine code description classes</a>
+  <li><a href="#codegendesc">The "Machine" Code Generator classes</a>
     <ul>
     <li><a href="#machineinstr">The <tt>MachineInstr</tt> class</a></li>
     <li><a href="#machinebasicblock">The <tt>MachineBasicBlock</tt>
@@ -41,6 +41,15 @@
     <li><a href="#machinefunction">The <tt>MachineFunction</tt> class</a></li>
     </ul>
   </li>
+  <li><a href="#mc">The "MC" Layer</a>
+    <ul>
+    <li><a href="#mcstreamer">The <tt>MCStreamer</tt> API</a></li>
+    <li><a href="#mccontext">The <tt>MCContext</tt> class</a>
+    <li><a href="#mcsymbol">The <tt>MCSymbol</tt> class</a></li>
+    <li><a href="#mcsection">The <tt>MCSection</tt> class</a></li>
+    <li><a href="#mcinst">The <tt>MCInst</tt> class</a></li>
+    </ul>
+  </li>
   <li><a href="#codegenalgs">Target-independent code generation algorithms</a>
     <ul>
     <li><a href="#instselect">Instruction Selection</a>
@@ -76,15 +85,14 @@
       <li><a href="#regAlloc_fold">Instruction folding</a></li>
       <li><a href="#regAlloc_builtIn">Built in register allocators</a></li>
       </ul></li>
-    <li><a href="#codeemit">Code Emission</a>
-        <ul>
-        <li><a href="#codeemit_asm">Generating Assembly Code</a></li>
-        <li><a href="#codeemit_bin">Generating Binary Machine Code</a></li>
-        </ul></li>
+    <li><a href="#codeemit">Code Emission</a></li>
     </ul>
   </li>
+  <li><a href="#nativeassembler">Implementing a Native Assembler</a></li>
+  
   <li><a href="#targetimpls">Target-specific Implementation Notes</a>
     <ul>
+    <li><a href="#targetfeatures">Target Feature Matrix</a></li>
     <li><a href="#tailcallopt">Tail call optimization</a></li>
     <li><a href="#sibcallopt">Sibling call optimization</a></li>
     <li><a href="#x86">The X86 backend</a></li>
@@ -100,11 +108,7 @@
 </ol>
 
 <div class="doc_author">
-  <p>Written by <a href="mailto:sabre at nondot.org">Chris Lattner</a>,
-                <a href="mailto:isanbard at gmail.com">Bill Wendling</a>,
-                <a href="mailto:pronesto at gmail.com">Fernando Magno Quintao
-                                                    Pereira</a> and
-                <a href="mailto:jlaskey at mac.com">Jim Laskey</a></p>
+  <p>Written by the LLVM Team.</p>
 </div>
 
 <div class="doc_warning">
@@ -123,7 +127,7 @@
    suite of reusable components for translating the LLVM internal representation
    to the machine code for a specified target—either in assembly form
    (suitable for a static compiler) or in binary machine code format (usable for
-   a JIT compiler). The LLVM target-independent code generator consists of five
+   a JIT compiler). The LLVM target-independent code generator consists of six
    main components:</p>
 
 <ol>
@@ -132,10 +136,17 @@
       independently of how they will be used.  These interfaces are defined in
       <tt>include/llvm/Target/</tt>.</li>
 
-  <li>Classes used to represent the <a href="#codegendesc">machine code</a>
-      being generated for a target.  These classes are intended to be abstract
+  <li>Classes used to represent the <a href="#codegendesc">code being
+      generated</a> for a target.  These classes are intended to be abstract
       enough to represent the machine code for <i>any</i> target machine.  These
-      classes are defined in <tt>include/llvm/CodeGen/</tt>.</li>
+      classes are defined in <tt>include/llvm/CodeGen/</tt>. At this level,
+      concepts like "constant pool entries" and "jump tables" are explicitly
+      exposed.</li>
+
+  <li>Classes and algorithms used to represent code as the object file level,
+      the <a href="#mc">MC Layer</a>.  These classes represent assembly level
+      constructs like labels, sections, and instructions.  At this level,
+      concepts like "constant pool entries" and "jump tables" don't exist.</li>
 
   <li><a href="#codegenalgs">Target-independent algorithms</a> used to implement
       various phases of native code generation (register allocation, scheduling,
@@ -732,6 +743,157 @@
 
 </div>
 
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="mc">The "MC" Layer</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>
+The MC Layer is used to represent and process code at the raw machine code
+level, devoid of "high level" information like "constant pools", "jump tables",
+"global variables" or anything like that.  At this level, LLVM handles things
+like label names, machine instructions, and sections in the object file.  The
+code in this layer is used for a number of important purposes: the tail end of
+the code generator uses it to write a .s or .o file, and it is also used by the
+llvm-mc tool to implement standalone machine codeassemblers and disassemblers.
+</p>
+
+<p>
+This section describes some of the important classes.  There are also a number
+of important subsystems that interact at this layer, they are described later
+in this manual.
+</p>
+
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="mcstreamer">The <tt>MCStreamer</tt> API</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+MCStreamer is best thought of as an assembler API.  It is an abstract API which
+is <em>implemented</em> in different ways (e.g. to output a .s file, output an
+ELF .o file, etc) but whose API correspond directly to what you see in a .s
+file.  MCStreamer has one method per directive, such as EmitLabel,
+EmitSymbolAttribute, SwitchSection, EmitValue (for .byte, .word), etc, which
+directly correspond to assembly level directives.  It also has an
+EmitInstruction method, which is used to output an MCInst to the streamer.
+</p>
+
+<p>
+This API is most important for two clients: the llvm-mc stand-alone assembler is
+effectively a parser that parses a line, then invokes a method on MCStreamer. In
+the code generator, the <a href="#codeemit">Code Emission</a> phase of the code
+generator lowers higher level LLVM IR and Machine* constructs down to the MC
+layer, emitting directives through MCStreamer.</p>
+
+<p>
+On the implementation side of MCStreamer, there are two major implementations:
+one for writing out a .s file (MCAsmStreamer), and one for writing out a .o
+file (MCObjectStreamer).  MCAsmStreamer is a straight-forward implementation
+that prints out a directive for each method (e.g. EmitValue -> .byte), but
+MCObjectStreamer implements a full assembler.
+</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="mccontext">The <tt>MCContext</tt> class</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+The MCContext class is the owner of a variety of uniqued data structures at the
+MC layer, including symbols, sections, etc.  As such, this is the class that you
+interact with to create symbols and sections.  This class can not be subclassed.
+</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="mcsymbol">The <tt>MCSymbol</tt> class</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+The MCSymbol class represents a symbol (aka label) in the assembly file.  There
+are two interesting kinds of symbols: assembler temporary symbols, and normal
+symbols.  Assembler temporary symbols are used and processed by the assembler
+but are discarded when the object file is produced.  The distinction is usually
+represented by adding a prefix to the label, for example "L" labels are
+assembler temporary labels in MachO.
+</p>
+
+<p>MCSymbols are created by MCContext and uniqued there.  This means that
+MCSymbols can be compared for pointer equivalence to find out if they are the
+same symbol.  Note that pointer inequality does not guarantee the labels will
+end up at different addresses though.  It's perfectly legal to output something
+like this to the .s file:<p>
+
+<pre>
+  foo:
+  bar:
+    .byte 4
+</pre>
+
+<p>In this case, both the foo and bar symbols will have the same address.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="mcsection">The <tt>MCSection</tt> class</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+The MCSection class represents an object-file specific section. It is subclassed
+by object file specific implementations (e.g. <tt>MCSectionMachO</tt>, 
+<tt>MCSectionCOFF</tt>, <tt>MCSectionELF</tt>) and these are created and uniqued
+by MCContext.  The MCStreamer has a notion of the current section, which can be
+changed with the SwitchToSection method (which corresponds to a ".section"
+directive in a .s file).
+</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="mcinst">The <tt>MCInst</tt> class</a></li>
+</div>
+
+<div class="doc_text">
+
+<p>
+The MCInst class is a target-independent representation of an instruction.  It
+is a simple class (much more so than <a href="#machineinstr">MachineInstr</a>)
+that holds a target-specific opcode and a vector of MCOperands.  MCOperand, in
+turn, is a simple discriminated union of three cases: 1) a simple immediate, 
+2) a target register ID, 3) a symbolic expression (e.g. "Lfoo-Lbar+42") as an
+MCExpr.
+</p>
+
+<p>MCInst is the common currency used to represent machine instructions at the
+MC layer.  It is the type used by the instruction encoder, the instruction
+printer, and the type generated by the assembly parser and disassembler.
+</p>
+
+</div>
+
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="codegenalgs">Target-independent code generation algorithms</a>
@@ -1457,8 +1619,8 @@
    order to get and store values in memory. To assign a physical register to a
    virtual register present in a given operand,
    use <tt>MachineOperand::setReg(p_reg)</tt>. To insert a store instruction,
-   use <tt>TargetRegisterInfo::storeRegToStackSlot(...)</tt>, and to insert a
-   load instruction, use <tt>TargetRegisterInfo::loadRegFromStackSlot</tt>.</p>
+   use <tt>TargetInstrInfo::storeRegToStackSlot(...)</tt>, and to insert a
+   load instruction, use <tt>TargetInstrInfo::loadRegFromStackSlot</tt>.</p>
 
 <p>The indirect mapping shields the application developer from the complexities
    of inserting load and store instructions. In order to map a virtual register
@@ -1635,26 +1797,101 @@
   <a name="latemco">Late Machine Code Optimizations</a>
 </div>
 <div class="doc_text"><p>To Be Written</p></div>
+
 <!-- ======================================================================= -->
 <div class="doc_subsection">
   <a name="codeemit">Code Emission</a>
 </div>
-<div class="doc_text"><p>To Be Written</p></div>
-<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
-  <a name="codeemit_asm">Generating Assembly Code</a>
+
+<div class="doc_text">
+
+<p>The code emission step of code generation is responsible for lowering from
+the code generator abstractions (like <a 
+href="#machinefunction">MachineFunction</a>, <a 
+href="#machineinstr">MachineInstr</a>, etc) down
+to the abstractions used by the MC layer (<a href="#mcinst">MCInst</a>, 
+<a href="#mcstreamer">MCStreamer</a>, etc).  This is
+done with a combination of several different classes: the (misnamed)
+target-independent AsmPrinter class, target-specific subclasses of AsmPrinter
+(such as SparcAsmPrinter), and the TargetLoweringObjectFile class.</p>
+
+<p>Since the MC layer works at the level of abstraction of object files, it
+doesn't have a notion of functions, global variables etc.  Instead, it thinks
+about labels, directives, and instructions.  A key class used at this time is
+the MCStreamer class.  This is an abstract API that is implemented in different
+ways (e.g. to output a .s file, output an ELF .o file, etc) that is effectively
+an "assembler API".  MCStreamer has one method per directive, such as EmitLabel,
+EmitSymbolAttribute, SwitchSection, etc, which directly correspond to assembly
+level directives.
+</p>
+
+<p>If you are interested in implementing a code generator for a target, there
+are three important things that you have to implement for your target:</p>
+
+<ol>
+<li>First, you need a subclass of AsmPrinter for your target.  This class
+implements the general lowering process converting MachineFunction's into MC
+label constructs.  The AsmPrinter base class provides a number of useful methods
+and routines, and also allows you to override the lowering process in some
+important ways.  You should get much of the lowering for free if you are
+implementing an ELF, COFF, or MachO target, because the TargetLoweringObjectFile
+class implements much of the common logic.</li>
+
+<li>Second, you need to implement an instruction printer for your target.  The
+instruction printer takes an <a href="#mcinst">MCInst</a> and renders it to a
+raw_ostream as text.  Most of this is automatically generated from the .td file
+(when you specify something like "<tt>add $dst, $src1, $src2</tt>" in the
+instructions), but you need to implement routines to print operands.</li>
+
+<li>Third, you need to implement code that lowers a <a
+href="#machineinstr">MachineInstr</a> to an MCInst, usually implemented in
+"<target>MCInstLower.cpp".  This lowering process is often target
+specific, and is responsible for turning jump table entries, constant pool
+indices, global variable addresses, etc into MCLabels as appropriate.  This
+translation layer is also responsible for expanding pseudo ops used by the code
+generator into the actual machine instructions they correspond to. The MCInsts
+that are generated by this are fed into the instruction printer or the encoder.
+</li>
+
+</ol>
+
+<p>Finally, at your choosing, you can also implement an subclass of
+MCCodeEmitter which lowers MCInst's into machine code bytes and relocations.
+This is important if you want to support direct .o file emission, or would like
+to implement an assembler for your target.</p>
+
 </div>
-<div class="doc_text"><p>To Be Written</p></div>
-<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
-  <a name="codeemit_bin">Generating Binary Machine Code</a>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="nativeassembler">Implementing a Native Assembler</a>
 </div>
+<!-- *********************************************************************** -->
 
 <div class="doc_text">
-   <p>For the JIT or <tt>.o</tt> file writer</p>
+
+<p>Though you're probably reading this because you want to write or maintain a
+compiler backend, LLVM also fully supports building a native assemblers too.
+We've tried hard to automate the generation of the assembler from the .td files
+(in particular the instruction syntax and encodings), which means that a large
+part of the manual and repetitive data entry can be factored and shared with the
+compiler.</p>
+
+
+
 </div>
 
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="proepicode">Prolog/Epilog Code Insertion</a>
+</div>
+<div class="doc_text"><p>To Be Written</p></div>
+
+
+
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="targetimpls">Target-specific Implementation Notes</a>
@@ -1664,10 +1901,282 @@
 <div class="doc_text">
 
 <p>This section of the document explains features or design decisions that are
-   specific to the code generator for a particular target.</p>
+   specific to the code generator for a particular target.  First we start
+   with a table that summarizes what features are supported by each target.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="targetfeatures">Target Feature Matrix</a>
+</div>
+
+<style type="text/css">
+  .unknown { background-color: #C0C0C0; text-align: center; }
+  .unknown:before { content: "?" }
+  .no { background-color: #C11B17 }
+  .no:before { content: "N" }
+  .partial { background-color: #F88017 }
+  .yes { background-color: #00FF00; }
+  .yes:before { content: "Y" }
+</style>
+
+
+<div class="doc_text">
+
+<p>Note that this table does not include the C backend or Cpp backends, since
+they do not use the target independent code generator infrastructure.  It also
+doesn't list features that are not supported fully by any target yet.  It
+considers a feature to be supported if at least one subtarget supports it.  A
+feature being supported means that it is useful and works for most cases, it
+does not indicate that there are zero known bugs in the implementation.  Here
+is the key:</p>
+
+
+<table border="1" cellspacing="0">
+  <tr>
+    <th>Unknown</th>
+    <th>No support</th>
+    <th>Partial Support</th>
+    <th>Complete Support</th>
+  </tr>
+  <tr>
+    <td class="unknown"></td>
+    <td class="no"></td>
+    <td class="partial"></td>
+    <td class="yes"></td>
+  </tr>
+</table>
+
+<p>Here is the table:</p>
+
+<table width="689" border="1" cellspacing="0">
+<tr><td></td>
+<td colspan="13" align="center" bgcolor="#ffffcc">Target</td>
+</tr>
+  <tr>
+    <th>Feature</th>
+    <th>ARM</th>
+    <th>Alpha</th>
+    <th>Blackfin</th>
+    <th>CellSPU</th>
+    <th>MBlaze</th>
+    <th>MSP430</th>
+    <th>Mips</th>
+    <th>PTX</th>
+    <th>PowerPC</th>
+    <th>Sparc</th>
+    <th>SystemZ</th>
+    <th>X86</th>
+    <th>XCore</th>
+  </tr>
+
+<tr>
+  <td><a href="#feat_reliable">is generally reliable</a></td>
+  <td class="yes"></td> <!-- ARM -->
+  <td class="unknown"></td> <!-- Alpha -->
+  <td class="no"></td> <!-- Blackfin -->
+  <td class="no"></td> <!-- CellSPU -->
+  <td class="no"></td> <!-- MBlaze -->
+  <td class="unknown"></td> <!-- MSP430 -->
+  <td class="unknown"></td> <!-- Mips -->
+  <td class="no"></td> <!-- PTX -->
+  <td class="yes"></td> <!-- PowerPC -->
+  <td class="yes"></td> <!-- Sparc -->
+  <td class="unknown"></td> <!-- SystemZ -->
+  <td class="yes"></td> <!-- X86 -->
+  <td class="unknown"></td> <!-- XCore -->
+</tr>
+
+<tr>
+  <td><a href="#feat_asmparser">assembly parser</a></td>
+  <td class="no"></td> <!-- ARM -->
+  <td class="no"></td> <!-- Alpha -->
+  <td class="no"></td> <!-- Blackfin -->
+  <td class="no"></td> <!-- CellSPU -->
+  <td class="no"></td> <!-- MBlaze -->
+  <td class="no"></td> <!-- MSP430 -->
+  <td class="no"></td> <!-- Mips -->
+  <td class="no"></td> <!-- PTX -->
+  <td class="no"></td> <!-- PowerPC -->
+  <td class="no"></td> <!-- Sparc -->
+  <td class="no"></td> <!-- SystemZ -->
+  <td class="yes"></td> <!-- X86 -->
+  <td class="no"></td> <!-- XCore -->
+</tr>
+
+<tr>
+  <td><a href="#feat_disassembler">disassembler</a></td>
+  <td class="yes"></td> <!-- ARM -->
+  <td class="no"></td> <!-- Alpha -->
+  <td class="no"></td> <!-- Blackfin -->
+  <td class="no"></td> <!-- CellSPU -->
+  <td class="no"></td> <!-- MBlaze -->
+  <td class="no"></td> <!-- MSP430 -->
+  <td class="no"></td> <!-- Mips -->
+  <td class="no"></td> <!-- PTX -->
+  <td class="no"></td> <!-- PowerPC -->
+  <td class="no"></td> <!-- Sparc -->
+  <td class="no"></td> <!-- SystemZ -->
+  <td class="yes"></td> <!-- X86 -->
+  <td class="no"></td> <!-- XCore -->
+</tr>
+
+<tr>
+  <td><a href="#feat_inlineasm">inline asm</a></td>
+  <td class="yes"></td> <!-- ARM -->
+  <td class="unknown"></td> <!-- Alpha -->
+  <td class="yes"></td> <!-- Blackfin -->
+  <td class="no"></td> <!-- CellSPU -->
+  <td class="no"></td> <!-- MBlaze -->
+  <td class="unknown"></td> <!-- MSP430 -->
+  <td class="unknown"></td> <!-- Mips -->
+  <td class="unknown"></td> <!-- PTX -->
+  <td class="yes"></td> <!-- PowerPC -->
+  <td class="unknown"></td> <!-- Sparc -->
+  <td class="unknown"></td> <!-- SystemZ -->
+  <td class="yes"><a href="#feat_inlineasm_x86">*</a></td> <!-- X86 -->
+  <td class="unknown"></td> <!-- XCore -->
+</tr>
+
+<tr>
+  <td><a href="#feat_jit">jit</a></td>
+  <td class="partial"><a href="#feat_jit_arm">*</a></td> <!-- ARM -->
+  <td class="unknown"></td> <!-- Alpha -->
+  <td class="no"></td> <!-- Blackfin -->
+  <td class="no"></td> <!-- CellSPU -->
+  <td class="no"></td> <!-- MBlaze -->
+  <td class="unknown"></td> <!-- MSP430 -->
+  <td class="unknown"></td> <!-- Mips -->
+  <td class="unknown"></td> <!-- PTX -->
+  <td class="yes"></td> <!-- PowerPC -->
+  <td class="unknown"></td> <!-- Sparc -->
+  <td class="unknown"></td> <!-- SystemZ -->
+  <td class="yes"></td> <!-- X86 -->
+  <td class="unknown"></td> <!-- XCore -->
+</tr>
+
+<tr>
+  <td><a href="#feat_objectwrite">.o file writing</a></td>
+  <td class="no"></td> <!-- ARM -->
+  <td class="no"></td> <!-- Alpha -->
+  <td class="no"></td> <!-- Blackfin -->
+  <td class="no"></td> <!-- CellSPU -->
+  <td class="no"></td> <!-- MBlaze -->
+  <td class="no"></td> <!-- MSP430 -->
+  <td class="no"></td> <!-- Mips -->
+  <td class="no"></td> <!-- PTX -->
+  <td class="no"></td> <!-- PowerPC -->
+  <td class="no"></td> <!-- Sparc -->
+  <td class="no"></td> <!-- SystemZ -->
+  <td class="yes"></td> <!-- X86 -->
+  <td class="no"></td> <!-- XCore -->
+</tr>
+
+<tr>
+  <td><a href="#feat_tailcall">tail calls</a></td>
+  <td class="yes"></td> <!-- ARM -->
+  <td class="unknown"></td> <!-- Alpha -->
+  <td class="no"></td> <!-- Blackfin -->
+  <td class="no"></td> <!-- CellSPU -->
+  <td class="no"></td> <!-- MBlaze -->
+  <td class="unknown"></td> <!-- MSP430 -->
+  <td class="unknown"></td> <!-- Mips -->
+  <td class="unknown"></td> <!-- PTX -->
+  <td class="yes"></td> <!-- PowerPC -->
+  <td class="unknown"></td> <!-- Sparc -->
+  <td class="unknown"></td> <!-- SystemZ -->
+  <td class="yes"></td> <!-- X86 -->
+  <td class="unknown"></td> <!-- XCore -->
+</tr>
+
+
+</table>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection" id="feat_reliable">Is Generally Reliable</div>
+
+<div class="doc_text">
+<p>This box indicates whether the target is considered to be production quality.
+This indicates that the target has been used as a static compiler to
+compile large amounts of code by a variety of different people and is in
+continuous use.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection" id="feat_asmparser">Assembly Parser</div>
+
+<div class="doc_text">
+<p>This box indicates whether the target supports parsing target specific .s
+files by implementing the MCAsmParser interface.  This is required for llvm-mc
+to be able to act as a native assembler and is required for inline assembly
+support in the native .o file writer.</p>
 
 </div>
 
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection" id="feat_disassembler">Disassembler</div>
+
+<div class="doc_text">
+<p>This box indicates whether the target supports the MCDisassembler API for
+disassembling machine opcode bytes into MCInst's.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection" id="feat_inlineasm">Inline Asm</div>
+
+<div class="doc_text">
+<p>This box indicates whether the target supports most popular inline assembly
+constraints and modifiers.</p>
+
+<p id="feat_inlineasm_x86">X86 lacks reliable support for inline assembly
+constraints relating to the X86 floating point stack.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection" id="feat_jit">JIT Support</div>
+
+<div class="doc_text">
+<p>This box indicates whether the target supports the JIT compiler through
+the ExecutionEngine interface.</p>
+
+<p id="feat_jit_arm">The ARM backend has basic support for integer code
+in ARM codegen mode, but lacks NEON and full Thumb support.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection" id="feat_objectwrite">.o File Writing</div>
+
+<div class="doc_text">
+
+<p>This box indicates whether the target supports writing .o files (e.g. MachO,
+ELF, and/or COFF) files directly from the target.  Note that the target also
+must include an assembly parser and general inline assembly support for full
+inline assembly support in the .o writer.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection" id="feat_tailcall">Tail Calls</div>
+
+<div class="doc_text">
+
+<p>This box indicates whether the target supports guaranteed tail calls.  These
+are calls marked "<a href="LangRef.html#i_call">tail</a>" and use the fastcc
+calling convention.  Please see the <a href="#tailcallopt">tail call section
+more more details</a>.</p>
+
+</div>
+
+
+
+
 <!-- ======================================================================= -->
 <div class="doc_subsection">
   <a name="tailcallopt">Tail call optimization</a>

Modified: llvm/branches/wendling/eh/docs/CodingStandards.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/CodingStandards.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/CodingStandards.html (original)
+++ llvm/branches/wendling/eh/docs/CodingStandards.html Tue Oct 26 19:48:03 2010
@@ -249,7 +249,7 @@
   <li><tt>llvm/*</tt></li>
   <li><tt>llvm/Analysis/*</tt></li>
   <li><tt>llvm/Assembly/*</tt></li>
-  <li><tt>llvm/Bytecode/*</tt></li>
+  <li><tt>llvm/Bitcode/*</tt></li>
   <li><tt>llvm/CodeGen/*</tt></li>
   <li>...</li>
   <li><tt>Support/*</tt></li>

Modified: llvm/branches/wendling/eh/docs/CommandGuide/FileCheck.pod
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/CommandGuide/FileCheck.pod?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/CommandGuide/FileCheck.pod (original)
+++ llvm/branches/wendling/eh/docs/CommandGuide/FileCheck.pod Tue Oct 26 19:48:03 2010
@@ -165,7 +165,7 @@
 =head2 The "CHECK-NOT:" directive
 
 The CHECK-NOT: directive is used to verify that a string doesn't occur
-between two matches (or the first match and the beginning of the file).  For
+between two matches (or before the first match, or after the last match).  For
 example, to verify that a load is removed by a transformation, a test like this
 can be used:
 

Modified: llvm/branches/wendling/eh/docs/CommandGuide/bugpoint.pod
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/CommandGuide/bugpoint.pod?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/CommandGuide/bugpoint.pod (original)
+++ llvm/branches/wendling/eh/docs/CommandGuide/bugpoint.pod Tue Oct 26 19:48:03 2010
@@ -67,6 +67,10 @@
 Pass all arguments specified after B<--gcc-tool-args> to the invocation of
 B<gcc>.
 
+=item B<--opt-args> I<opt args>
+
+Pass all arguments specified after B<--opt-args> to the invocation of B<opt>.
+
 =item B<--disable-{dce,simplifycfg}>
 
 Do not run the specified passes to clean up and reduce the size of the test

Modified: llvm/branches/wendling/eh/docs/CommandGuide/index.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/CommandGuide/index.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/CommandGuide/index.html (original)
+++ llvm/branches/wendling/eh/docs/CommandGuide/index.html Tue Oct 26 19:48:03 2010
@@ -72,6 +72,9 @@
 <li><a href="/cmds/llvmc.html"><b>llvmc</b></a> -
     a generic customizable compiler driver</li>
 
+<li><a href="/cmds/llvm-diff.html"><b>llvm-diff</b></a> -
+    structurally compare two modules</li>
+
 </ul>
 
 </div>

Modified: llvm/branches/wendling/eh/docs/DeveloperPolicy.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/DeveloperPolicy.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/DeveloperPolicy.html (original)
+++ llvm/branches/wendling/eh/docs/DeveloperPolicy.html Tue Oct 26 19:48:03 2010
@@ -29,7 +29,6 @@
     <li><a href="#copyright">Copyright</a></li>
     <li><a href="#license">License</a></li>
     <li><a href="#patents">Patents</a></li>
-    <li><a href="#devagree">Developer Agreements</a></li>
   </ol></li>
 </ol>
 <div class="doc_author">Written by the LLVM Oversight Team</div>
@@ -43,7 +42,8 @@
    is to eliminate miscommunication, rework, and confusion that might arise from
    the distributed nature of LLVM's development.  By stating the policy in clear
    terms, we hope each developer can know ahead of time what to expect when
-   making LLVM contributions.</p>
+   making LLVM contributions.  This policy covers all llvm.org subprojects,
+   including Clang, LLDB, etc.</p>
 <p>This policy is also designed to accomplish the following objectives:</p>
 
 <ol>
@@ -77,17 +77,28 @@
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsection"> <a name="informed">Stay Informed</a> </div>
 <div class="doc_text">
-<p>Developers should stay informed by reading at least the 
-   <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> email
-  list.  If you are doing anything more than just casual work on LLVM, it is
-  suggested that you also subscribe to the
-  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>
-  list and pay attention to changes being made by others.</p>
+<p>Developers should stay informed by reading at least the "dev" mailing list
+   for the projects you are interested in, such as 
+   <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> for
+   LLVM, <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a>
+   for Clang, or <a
+   href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev">lldb-dev</a>
+   for LLDB.  If you are doing anything more than just casual work on LLVM, it
+   is suggested that you also subscribe to the "commits" mailing list for the
+   subproject you're interested in, such as
+  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>,
+  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a>,
+  or <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits">lldb-commits</a>.
+   Reading the "commits" list and paying attention to changes being made by
+   others is a good way to see what other people are interested in and watching
+   the flow of the project as a whole.</p>
 
 <p>We recommend that active developers register an email account with 
    <a href="http://llvm.org/bugs/">LLVM Bugzilla</a> and preferably subscribe to
    the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs">llvm-bugs</a>
-   email list to keep track of bugs and enhancements occurring in LLVM.</p>
+   email list to keep track of bugs and enhancements occurring in LLVM.  We
+   really appreciate people who are proactive at catching incoming bugs in their
+   components and dealing with them promptly.</p>
 </div>
 
 <!-- _______________________________________________________________________ -->
@@ -107,18 +118,13 @@
       patches may not apply correctly if the underlying code changes between the
       time the patch was created and the time it is applied.</li>
 
-  <li>Patches should be made with this command:
-<div class="doc_code">
-<pre>
-svn diff
-</pre>
-</div>
-      or with the utility <tt>utils/mkpatch</tt>, which makes it easy to read
-      the diff.</li>
-
-  <li>Patches should not include differences in generated code such as the code
-      generated by <tt>autoconf</tt> or <tt>tblgen</tt>. The
-      <tt>utils/mkpatch</tt> utility takes care of this for you.</li>
+  <li>Patches should be made with <tt>svn diff</tt>, or similar. If you use
+      a different tool, make sure it uses the <tt>diff -u</tt> format and
+      that it doesn't contain clutter which makes it hard to read.</li>
+
+  <li>If you are modifying generated files, such as the top-level
+      <tt>configure</tt> script, please separate out those changes into
+      a separate patch from the rest of your changes.</li>
 </ol>
   
 <p>When sending a patch to a mailing list, it is a good idea to send it as an
@@ -189,7 +195,11 @@
 <ol>
   <li><b>Evan Cheng</b>: Code generator and all targets.</li>
 
-  <li><b>Doug Gregor</b>: Clang Basic, Lex, Parse, and Sema Libraries.</li>
+  <li><b>Greg Clayton</b>: LLDB.</li>
+
+  <li><b>Doug Gregor</b>: Clang Frontend Libraries.</li>
+
+  <li><b>Howard Hinnant</b>: libc++.</li>
 
   <li><b>Anton Korobeynikov</b>: Exception handling, debug information, and
       Windows codegen.</li>
@@ -239,8 +249,9 @@
       them short.</li>
 </ol>
   
-<p>Note that llvm/test is designed for regression and small feature tests
-   only. More extensive test cases (e.g., entire applications, benchmarks, etc)
+<p>Note that llvm/test and clang/test are designed for regression and small
+   feature tests only. More extensive test cases (e.g., entire applications,
+   benchmarks, etc)
    should be added to the <tt>llvm-test</tt> test suite.  The llvm-test suite is
    for coverage (correctness, performance, etc) testing, not feature or
    regression testing.</p>
@@ -263,7 +274,7 @@
       testcase</a> so we know if the fix/feature ever regresses in the
       future.</li>
 
-  <li>Code must pass the dejagnu (<tt>llvm/test</tt>) test suite.</li>
+  <li>Code must pass the <tt>llvm/test</tt> test suite.</li>
 
   <li>The code must not cause regressions on a reasonable subset of llvm-test,
       where "reasonable" depends on the contributor's judgement and the scope of
@@ -498,20 +509,24 @@
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsection"><a name="copyright">Copyright</a></div>
 <div class="doc_text">
-<p>For consistency and ease of management, the project requires the copyright
-   for all LLVM software to be held by a single copyright holder: the University
-   of Illinois (UIUC).</p>
-  
-<p>Although UIUC may eventually reassign the copyright of the software to
-   another entity (e.g. a dedicated non-profit "LLVM Organization") the intent
-   for the project is to always have a single entity hold the copyrights to LLVM
-   at any given time.</p>
-
-<p>We believe that having a single copyright holder is in the best interests of
-   all developers and users as it greatly reduces the managerial burden for any
-   kind of administrative or technical decisions about LLVM.  The goal of the
-   LLVM project is to always keep the code open and <a href="#license">licensed
-   under a very liberal license</a>.</p>
+
+<p>The LLVM project does not require copyright assignments, which means that the
+   copyright for the code in the project is held by its respective contributors
+   who have each agreed to release their contributed code under the terms of the
+   <a href="#license">LLVM License</a>.</p>
+   
+<p>An implication of this is that the LLVM license is unlikely to ever change:
+   changing it would require tracking down all the contributors to LLVM and
+   getting them to agree that a license change is acceptable for their
+   contribution.  Since there are no plans to change the license, this is not a
+   cause for concern.</p>
+   
+<p>As a contributor to the project, this means that you (or your company) retain
+   ownership of the code you contribute, that it cannot be used in a way that
+   contradicts the license (which is a liberal BSD-style license), and that the
+   license for your contributions won't change without your approval in the
+   future.</p>
+   
 </div>
 
 <!-- _______________________________________________________________________ -->
@@ -576,21 +591,6 @@
    details.</p>
 </div>
 
-<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="devagree">Developer Agreements</a></div>
-<div class="doc_text">
-<p>With regards to the LLVM copyright and licensing, developers agree to assign
-   their copyrights to UIUC for any contribution made so that the entire
-   software base can be managed by a single copyright holder.  This implies that
-   any contributions can be licensed under the license that the project
-   uses.</p>
-
-<p>When contributing code, you also affirm that you are legally entitled to
-   grant this copyright, personally or on behalf of your employer.  If the code
-   belongs to some other entity, please raise this issue with the oversight
-   group before the code is committed.</p>
-</div>
-
 <!-- *********************************************************************** -->
 <hr>
 <address>

Modified: llvm/branches/wendling/eh/docs/ExceptionHandling.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/ExceptionHandling.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/ExceptionHandling.html (original)
+++ llvm/branches/wendling/eh/docs/ExceptionHandling.html Tue Oct 26 19:48:03 2010
@@ -40,6 +40,7 @@
   	<li><a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a></li>
   	<li><a href="#llvm_eh_sjlj_lsda"><tt>llvm.eh.sjlj.lsda</tt></a></li>
   	<li><a href="#llvm_eh_sjlj_callsite"><tt>llvm.eh.sjlj.callsite</tt></a></li>
+  	<li><a href="#llvm_eh_sjlj_dispatchsetup"><tt>llvm.eh.sjlj.dispatchsetup</tt></a></li>
   </ol></li>
   <li><a href="#asm">Asm Table Formats</a>
   <ol>
@@ -548,6 +549,23 @@
 </div>
 
 <!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="llvm_eh_sjlj_dispatchsetup">llvm.eh.sjlj.dispatchsetup</a>
+</div>
+
+<div class="doc_text">
+
+<pre>
+  void %<a href="#llvm_eh_sjlj_dispatchsetup">llvm.eh.sjlj.dispatchsetup</a>(i32)
+</pre>
+
+<p>For SJLJ based exception handling, the <a href="#llvm_eh_sjlj_dispatchsetup">
+  <tt>llvm.eh.sjlj.dispatchsetup</tt></a> intrinsic is used by targets to do
+  any unwind-edge setup they need. By default, no action is taken.  </p>
+
+</div>
+
+<!-- ======================================================================= -->
 <div class="doc_section">
   <a name="asm">Asm Table Formats</a>
 </div>

Modified: llvm/branches/wendling/eh/docs/GCCFEBuildInstrs.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/GCCFEBuildInstrs.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/GCCFEBuildInstrs.html (original)
+++ llvm/branches/wendling/eh/docs/GCCFEBuildInstrs.html Tue Oct 26 19:48:03 2010
@@ -84,7 +84,7 @@
   <li><p>The build requires having a compiler that supports Ada, C and C++.
       The Ada front-end is written in Ada so an Ada compiler is needed to
       build it.  Compilers known to work with the
-      <a href="http://llvm.org/releases/download.html">LLVM 2.5 release</a>
+      <a href="http://llvm.org/releases/download.html">LLVM 2.7 release</a>
       are <a href="http://gcc.gnu.org/releases.html">gcc-4.2</a> and the
       2005, 2006 and 2007 versions of the
       <a href="http://libre.adacore.com/">GNAT GPL Edition</a>.
@@ -116,9 +116,9 @@
       and unpack it:</p>
 
 <pre class="doc_code">
-wget http://llvm.org/releases/2.5/llvm-2.5.tar.gz
-tar xzf llvm-2.5.tar.gz
-mv llvm-2.5 llvm
+wget http://llvm.org/releases/2.7/llvm-2.7.tgz
+tar xzf llvm-2.7.tgz
+mv llvm-2.7 llvm
 </pre>
 
       <p>or <a href="GettingStarted.html#checkout">check out the
@@ -133,9 +133,9 @@
       and unpack it:</p>
 
 <pre class="doc_code">
-wget http://llvm.org/releases/2.5/llvm-gcc-4.2-2.5.source.tar.gz
-tar xzf llvm-gcc-4.2-2.5.source.tar.gz
-mv llvm-gcc4.2-2.5.source llvm-gcc-4.2
+wget http://llvm.org/releases/2.7/llvm-gcc-4.2-2.7.source.tgz
+tar xzf llvm-gcc-4.2-2.7.source.tgz
+mv llvm-gcc-4.2-2.7.source llvm-gcc-4.2
 </pre>
 
       <p>or <a href="GettingStarted.html#checkout">check out the

Modified: llvm/branches/wendling/eh/docs/GetElementPtr.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/GetElementPtr.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/GetElementPtr.html (original)
+++ llvm/branches/wendling/eh/docs/GetElementPtr.html Tue Oct 26 19:48:03 2010
@@ -26,7 +26,6 @@
     <li><a href="#lead0">Why don't GEP x,0,0,1 and GEP x,1 alias? </a></li>
     <li><a href="#trail0">Why do GEP x,1,0,0 and GEP x,1 alias? </a></li>
     <li><a href="#vectors">Can GEP index into vector elements?</a>
-    <li><a href="#unions">Can GEP index into unions?</a>
     <li><a href="#addrspace">What effect do address spaces have on GEPs?</a>
     <li><a href="#int">How is GEP different from ptrtoint, arithmetic, and inttoptr?</a></li>
     <li><a href="#be">I'm writing a backend for a target which needs custom lowering for GEP. How do I do this?</a>
@@ -370,16 +369,6 @@
 <!-- *********************************************************************** -->
 
 <div class="doc_subsection">
-  <a name="unions"><b>Can GEP index into unions?</b></a>
-</div>
-<div class="doc_text">
-   <p>Unknown.</p>
-
-</div>
-
-<!-- *********************************************************************** -->
-
-<div class="doc_subsection">
   <a name="addrspace"><b>What effect do address spaces have on GEPs?</b></a>
 </div>
 <div class="doc_text">

Modified: llvm/branches/wendling/eh/docs/GettingStarted.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/GettingStarted.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/GettingStarted.html (original)
+++ llvm/branches/wendling/eh/docs/GettingStarted.html Tue Oct 26 19:48:03 2010
@@ -44,7 +44,7 @@
       <li><a href="#projects"><tt>llvm/projects</tt></a></li>
       <li><a href="#runtime"><tt>llvm/runtime</tt></a></li>
       <li><a href="#test"><tt>llvm/test</tt></a></li>
-      <li><a href="#llvmtest"><tt>llvm-test</tt></a></li>
+      <li><a href="#test-suite"><tt>test-suite</tt></a></li>
       <li><a href="#tools"><tt>llvm/tools</tt></a></li>
       <li><a href="#utils"><tt>llvm/utils</tt></a></li>
       <li><a href="#win32"><tt>llvm/win32</tt></a></li>
@@ -80,11 +80,12 @@
 <p>Welcome to LLVM! In order to get started, you first need to know some
 basic information.</p>
 
-<p>First, LLVM comes in two pieces. The first piece is the LLVM suite. This
-contains all of the tools, libraries, and header files needed to use the low
-level virtual machine.  It contains an assembler, disassembler, bitcode
-analyzer and bitcode optimizer.  It also contains a test suite that can be
-used to test the LLVM tools and the GCC front end.</p>
+<p>First, LLVM comes in three pieces. The first piece is the LLVM
+suite. This contains all of the tools, libraries, and header files
+needed to use the low level virtual machine.  It contains an
+assembler, disassembler, bitcode analyzer and bitcode optimizer.  It
+also contains basic regression tests that can be used to test the LLVM
+tools and the GCC front end.</p>
 
 <p>The second piece is the GCC front end.  This component provides a version of
 GCC that compiles C and C++ code into LLVM bitcode.  Currently, the GCC front
@@ -93,7 +94,7 @@
 from the LLVM suite.</p>
 
 <p>
-There is a third, optional piece called llvm-test.  It is a suite of programs
+There is a third, optional piece called Test Suite.  It is a suite of programs
 with a testing harness that can be used to further test LLVM's functionality
 and performance.
 </p>
@@ -142,6 +143,7 @@
       <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
       <li><tt>cd llvm/projects</tt>
       <li><tt>gunzip --stdout llvm-test-<i>version</i>.tar.gz | tar -xvf -</tt>
+      <li><tt>mv llvm-test-<i>version</i> test-suite</tt>
     </ol></li>
 
   </ul></li>
@@ -162,7 +164,7 @@
         <p>Optionally, specify for <i>directory</i> the full pathname of the 
         C/C++ front end installation to use with this LLVM configuration. If
         not specified, the PATH will be searched.  This is only needed if you
-        want to run the testsuite or do some special kinds of LLVM builds.</p></li>
+        want to run test-suite or do some special kinds of LLVM builds.</p></li>
         <li><tt>--enable-spec2000=<i>directory</i></tt>
             <p>Enable the SPEC2000 benchmarks for testing.  The SPEC2000
             benchmarks should be available in
@@ -564,6 +566,9 @@
 <p><b>GCC 4.3.3 (Debian 4.3.3-10) on ARM</b>: Miscompiles parts of LLVM 2.6
 when optimizations are turned on. The symptom is an infinite loop in
 FoldingSetImpl::RemoveNode while running the code generator.</p>
+<p><b>GCC 4.3.5 and GCC 4.4.5 on ARM</b>: These can miscompile <tt>value >>
+1</tt> even at -O0. A test failure in <tt>test/Assembler/alignstack.ll</tt> is
+one symptom of the problem.
 <p><b>GNU ld 2.16.X</b>. Some 2.16.X versions of the ld linker will produce very
 long warning messages complaining that some ".gnu.linkonce.t.*" symbol was
 defined in a discarded section. You can safely ignore these messages as they are
@@ -684,7 +689,7 @@
   <dd>Source release for the LLVM libraries and tools.<br></dd>
 
   <dt><tt>llvm-test-x.y.tar.gz</tt></dt>
-  <dd>Source release for the LLVM test suite.</dd>
+  <dd>Source release for the LLVM test-suite.</dd>
 
   <dt><tt>llvm-gcc-4.2-x.y.source.tar.gz</tt></dt>
   <dd>Source release of the llvm-gcc-4.2 front end.  See README.LLVM in the root
@@ -726,6 +731,8 @@
 subdirectories of the '<tt>tags</tt>' directory:</p>
 
 <ul>
+<li>Release 2.8: <b>RELEASE_28</b></li>
+<li>Release 2.7: <b>RELEASE_27</b></li>
 <li>Release 2.6: <b>RELEASE_26</b></li>
 <li>Release 2.5: <b>RELEASE_25</b></li>
 <li>Release 2.4: <b>RELEASE_24</b></li>
@@ -751,7 +758,7 @@
 <div class="doc_code">
 <pre>
 % cd llvm/projects
-% svn co http://llvm.org/svn/llvm-project/test-suite/trunk llvm-test
+% svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite
 </pre>
 </div>
 
@@ -774,7 +781,7 @@
 
 <p>Before configuring and compiling the LLVM suite (or if you want to use just the LLVM
 GCC front end) you can optionally extract the front end from the binary distribution.
-It is used for running the llvm-test testsuite and for compiling C/C++ programs.  Note that
+It is used for running the LLVM test-suite and for compiling C/C++ programs.  Note that
 you can optionally <a href="GCCFEBuildInstrs.html">build llvm-gcc yourself</a> after building the
 main LLVM repository.</p>
 
@@ -795,9 +802,9 @@
 
 <p>If you now want to build LLVM from source, when you configure LLVM, it will 
 automatically detect <tt>llvm-gcc</tt>'s presence (if it is in your path) enabling its
-use in llvm-test.  Note that you can always build or install <tt>llvm-gcc</tt> at any
+use in test-suite.  Note that you can always build or install <tt>llvm-gcc</tt> at any
 point after building the main LLVM repository: just reconfigure llvm and 
-llvm-test will pick it up.
+test-suite will pick it up.
 </p>
 
 <p>As a convenience for Windows users, the front end binaries for MinGW/x86 include
@@ -1348,7 +1355,7 @@
 </div>
 
 <!-- ======================================================================= -->
-<div class="doc_subsection"><a name="llvmtest"><tt>test-suite</tt></a></div>
+<div class="doc_subsection"><a name="test-suite"><tt>test-suite</tt></a></div>
 <div class="doc_text">
   <p>This is not a directory in the normal llvm module; it is a separate
   Subversion
@@ -1408,7 +1415,7 @@
 
   <dt><tt><b>llvm-ld</b></tt></dt>
   <dd><tt>llvm-ld</tt> is a general purpose and extensible linker for LLVM. 
-  This is the linker invoked by <tt>llvmc</tt>. It performsn standard link time
+  This is the linker invoked by <tt>llvmc</tt>. It performs standard link time
   optimizations and allows optimization modules to be loaded and run so that 
   language specific optimizations can be applied at link time.</dd>
 

Modified: llvm/branches/wendling/eh/docs/GettingStartedVS.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/GettingStartedVS.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/GettingStartedVS.html (original)
+++ llvm/branches/wendling/eh/docs/GettingStartedVS.html Tue Oct 26 19:48:03 2010
@@ -14,26 +14,19 @@
 
 <ul>
   <li><a href="#overview">Overview</a>
-  <li><a href="#quickstart">Getting Started Quickly (A Summary)</a>
   <li><a href="#requirements">Requirements</a>
     <ol>
       <li><a href="#hardware">Hardware</a>
       <li><a href="#software">Software</a>
     </ol></li>
-
-  <li><a href="#starting">Getting Started with LLVM</a>
-    <ol>
-      <li><a href="#terminology">Terminology and Notation</a>
-      <li><a href="#objfiles">The Location of LLVM Object Files</a>
-    </ol></li>
-
+  <li><a href="#quickstart">Getting Started</a>
   <li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
   <li><a href="#problems">Common Problems</a>
   <li><a href="#links">Links</a>
 </ul>
 
 <div class="doc_author">
-  <p>Written by: 
+  <p>Written by:
     <a href="mailto:jeffc at jolt-lang.org">Jeff Cohen</a>
   </p>
 </div>
@@ -47,26 +40,30 @@
 
 <div class="doc_text">
 
-  <p>The Visual Studio port at this time is experimental.  It is suitable for
-  use only if you are writing your own compiler front end or otherwise have a
-  need to dynamically generate machine code.  The JIT and interpreter are
-  functional, but it is currently not possible to generate assembly code which
-  is then assembled into an executable.  You can indirectly create executables
-  by using the C back end.</p>
-
-  <p>To emphasize, there is no C/C++ front end currently available.
-  <tt>llvm-gcc</tt> is based on GCC, which cannot be bootstrapped using VC++.
-  Eventually there should be a <tt>llvm-gcc</tt> based on Cygwin or MinGW that
-  is usable.  There is also the option of generating bitcode files on Unix and
-  copying them over to Windows.  But be aware the odds of linking C++ code
-  compiled with <tt>llvm-gcc</tt> with code compiled with VC++ is essentially
-  zero.</p>
+  <p>Welcome to LLVM on Windows! This document only covers LLVM on Windows using
+  Visual Studio, not mingw or cygwin. In order to get started, you first need to
+  know some basic information.</p>
+
+  <p>There are many different projects that compose LLVM. The first is the LLVM
+  suite. This contains all of the tools, libraries, and header files needed to
+  use the low level virtual machine. It contains an assembler, disassembler,
+  bitcode analyzer and bitcode optimizer. It also contains a test suite that can
+  be used to test the LLVM tools.</p>
+
+  <p>Another useful project on Windows is
+  <a href="http://clang.llvm.org/">clang</a>. Clang is a C family
+  ([Objective]C/C++) compiler. Clang mostly works on Windows, but does not
+  currently understand all of the Microsoft extensions to C and C++. Because of
+  this, clang cannot parse the C++ standard library included with Visual Studio,
+  nor parts of the Windows Platform SDK. However, most standard C programs do
+  compile. Clang can be used to emit bitcode, directly emit object files or
+  even linked executables using Visual Studio's <tt>link.exe</tt></p>
 
-  <p>The LLVM test suite cannot be run on the Visual Studio port at this
+  <p>The large LLVM test suite cannot be run on the Visual Studio port at this
   time.</p>
 
   <p>Most of the tools build and work.  <tt>bugpoint</tt> does build, but does
-  not work.  The other tools 'should' work, but have not been fully tested.</p>
+  not work.</p>
 
   <p>Additional information about the LLVM directory structure and tool chain
   can be found on the main <a href="GettingStarted.html">Getting Started</a>
@@ -76,89 +73,6 @@
 
 <!-- *********************************************************************** -->
 <div class="doc_section">
-  <a name="quickstart"><b>Getting Started Quickly (A Summary)</b></a>
-</div>
-<!-- *********************************************************************** -->
-
-<div class="doc_text">
-
-<p>Here's the short story for getting up and running quickly with LLVM:</p>
-
-<ol>
-  <li>Read the documentation.</li>
-  <li>Seriously, read the documentation.</li>
-  <li>Remember that you were warned twice about reading the documentation.</li>
-
-  <li>Get the Source Code
-  <ul>
-    <li>With the distributed files:
-    <ol>
-      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
-      <li><tt>gunzip --stdout llvm-<i>version</i>.tar.gz | tar -xvf -</tt>
-      <i>      or use WinZip</i>
-      <li><tt>cd llvm</tt></li>
-    </ol></li>
-
-    <li>With anonymous Subversion access:
-    <ol>
-      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt></li>
-      <li><tt>svn co http://llvm.org/svn/llvm-project/llvm-top/trunk llvm-top
-      </tt></li>
-      <li><tt>make checkout MODULE=llvm</tt>
-      <li><tt>cd llvm</tt></li>
-    </ol></li>
-  </ul></li>
-  
-  <li> Use <a href="http://www.cmake.org/">CMake</a> to generate up-to-date
-    project files:
-    <ul><li>This step is currently optional as LLVM does still come with a
-    normal Visual Studio solution file, but it is not always kept up-to-date
-    and will soon be deprecated in favor of the multi-platform generator
-    CMake.</li>
-    <li>If CMake is installed then the most simple way is to just start the
-    CMake GUI, select the directory where you have LLVM extracted to, and
-    the default options should all be fine.  The one option you may really
-    want to change, regardless of anything else, might be the
-    CMAKE_INSTALL_PREFIX setting to select a directory to INSTALL to once
-    compiling is complete.</li>
-    <li>If you use CMake to generate the Visual Studio solution and project
-    files, then the Solution will have a few extra options compared to the
-    current included one.  The projects may still be built individually, but
-    to build them all do not just select all of them in batch build (as some
-    are meant as configuration projects), but rather select and build just
-    the ALL_BUILD project to build everything, or the INSTALL project, which
-    first builds the ALL_BUILD project, then installs the LLVM headers, libs,
-    and other useful things to the directory set by the CMAKE_INSTALL_PREFIX
-    setting when you first configured CMake.</li>
-    </ul>
-  </li>
-
-  <li>Start Visual Studio
-  <ul>
-    <li>If you did not use CMake, then simply double click on the solution
-    file <tt>llvm/win32/llvm.sln</tt>.</li>
-    <li>If you used CMake, then the directory you created the project files,
-    the root directory will have an <tt>llvm.sln</tt> file, just
-    double-click on that to open Visual Studio.</li>
-  </ul></li>
-
-  <li>Build the LLVM Suite:
-  <ul>
-    <li>Simply build the solution.</li>
-    <li>The Fibonacci project is a sample program that uses the JIT.  Modify
-    the project's debugging properties to provide a numeric command line
-    argument.  The program will print the corresponding fibonacci value.</li>
-  </ul></li>
-
-</ol>
-
-<p>It is strongly encouraged that you get the latest version from Subversion as
-changes are continually making the VS support better.</p>
-
-</div>
-
-<!-- *********************************************************************** -->
-<div class="doc_section">
   <a name="requirements"><b>Requirements</b></a>
 </div>
 <!-- *********************************************************************** -->
@@ -178,7 +92,7 @@
 
 <div class="doc_text">
 
-  <p>Any system that can adequately run Visual Studio .NET 2005 SP1 is fine.  
+  <p>Any system that can adequately run Visual Studio .NET 2005 SP1 is fine.
   The LLVM source tree and object files, libraries and executables will consume
   approximately 3GB.</p>
 
@@ -190,75 +104,116 @@
 
   <p>You will need Visual Studio .NET 2005 SP1 or higher.  The VS2005 SP1
   beta and the normal VS2005 still have bugs that are not completely
-  compatible. VS2003 would work except (at last check) it has a bug with
-  friend classes that you can work-around with some minor code rewriting
-  (and please submit a patch if you do).  Earlier versions of Visual Studio
-  do not support the C++ standard well enough and will not work.</p>
-  
+  compatible.  Earlier versions of Visual Studio do not support the C++ standard
+  well enough and will not work.</p>
+
   <p>You will also need the <a href="http://www.cmake.org/">CMake</a> build
   system since it generates the project files you will use to build with.</p>
 
-  <p>
-  Do not install the LLVM directory tree into a path containing spaces (e.g.
+  <p>If you would like to run the LLVM tests you will need
+  <a href="http://www.python.org/">Python</a>. Versions 2.4-2.7 are known to
+  work.</p>
+
+  <p>Do not install the LLVM directory tree into a path containing spaces (e.g.
   C:\Documents and Settings\...) as the configure step will fail.</p>
 
 </div>
 
 <!-- *********************************************************************** -->
 <div class="doc_section">
-  <a name="starting"><b>Getting Started with LLVM</b></a>
+  <a name="quickstart"><b>Getting Started</b></a>
 </div>
 <!-- *********************************************************************** -->
 
 <div class="doc_text">
 
-<p>The remainder of this guide is meant to get you up and running with
-LLVM using Visual Studio and to give you some basic information about the LLVM
-environment.</p>
+<p>Here's the short story for getting up and running quickly with LLVM:</p>
 
-</div>
+<ol>
+  <li>Read the documentation.</li>
+  <li>Seriously, read the documentation.</li>
+  <li>Remember that you were warned twice about reading the documentation.</li>
 
-<!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="terminology">Terminology and Notation</a>
-</div>
+  <li>Get the Source Code
+  <ul>
+    <li>With the distributed files:
+    <ol>
+      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
+      <li><tt>gunzip --stdout llvm-<i>version</i>.tar.gz | tar -xvf -</tt>
+      <i>      or use WinZip</i>
+      <li><tt>cd llvm</tt></li>
+    </ol></li>
 
-<div class="doc_text">
+    <li>With anonymous Subversion access:
+    <ol>
+      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt></li>
+      <li><tt>svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</tt></li>
+      <li><tt>cd llvm</tt></li>
+    </ol></li>
+  </ul></li>
 
-<p>Throughout this manual, the following names are used to denote paths
-specific to the local system and working environment.  <i>These are not
-environment variables you need to set but just strings used in the rest
-of this document below</i>.  In any of the examples below, simply replace
-each of these names with the appropriate pathname on your local system.
-All these paths are absolute:</p>
-
-<dl>
-    <dt>SRC_ROOT</dt>
-    <dd><p>This is the top level directory of the LLVM source tree.</p></dd>
-
-    <dt>OBJ_ROOT</dt>
-    <dd><p>This is the top level directory of the LLVM object tree (i.e. the
-        tree where object files and compiled programs will be placed.  It is
-        fixed at SRC_ROOT/win32).</p></dd>
-</dl>
+  <li> Use <a href="http://www.cmake.org/">CMake</a> to generate up-to-date
+    project files:
+    <ul>
+      <li>Once CMake is installed then the simplest way is to just start the
+        CMake GUI, select the directory where you have LLVM extracted to, and the
+        default options should all be fine.  One option you may really want to
+        change, regardless of anything else, might be the CMAKE_INSTALL_PREFIX
+        setting to select a directory to INSTALL to once compiling is complete,
+        although installation is not mandatory for using LLVM.  Another important
+        option is LLVM_TARGETS_TO_BUILD, which controls the LLVM target
+        architectures that are included on the build.
+      <li>See the <a href="CMake.html">LLVM CMake guide</a> for
+        detailed information about how to configure the LLVM
+        build.</li>
+    </ul>
+  </li>
 
-</div>
+  <li>Start Visual Studio
+  <ul>
+    <li>In the directory you created the project files will have
+    an <tt>llvm.sln</tt> file, just double-click on that to open
+    Visual Studio.</li>
+  </ul></li>
 
-<!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="objfiles">The Location of LLVM Object Files</a>
+  <li>Build the LLVM Suite:
+  <ul>
+    <li>The projects may still be built individually, but
+    to build them all do not just select all of them in batch build (as some
+    are meant as configuration projects), but rather select and build just
+    the ALL_BUILD project to build everything, or the INSTALL project, which
+    first builds the ALL_BUILD project, then installs the LLVM headers, libs,
+    and other useful things to the directory set by the CMAKE_INSTALL_PREFIX
+    setting when you first configured CMake.</li>
+    <li>The Fibonacci project is a sample program that uses the JIT.
+    Modify the project's debugging properties to provide a numeric
+    command line argument or run it from the command line.  The
+    program will print the corresponding fibonacci value.</li>
+  </ul></li>
+
+  <li>Test LLVM:
+  <ul>
+    <li>The LLVM tests can be run by <tt>cd</tt>ing to the llvm source directory
+        and running:
+
+<div class="doc_code">
+<pre>
+% llvm-lit test
+</pre>
 </div>
 
-<div class="doc_text">
+    <p>Note that quite a few of these test will fail.</p>
+    </li>
 
-  <p>The object files are placed under <tt>OBJ_ROOT/Debug</tt> for debug builds
-  and <tt>OBJ_ROOT/Release</tt> for release (optimized) builds.  These include
-  both executables and libararies that your application can link against.</p>
-
-  <p>The files that <tt>configure</tt> would create when building on Unix are
-  created by the <tt>Configure</tt> project and placed in
-  <tt>OBJ_ROOT/llvm</tt>.  You application must have OBJ_ROOT in its include
-  search path just before <tt>SRC_ROOT/include</tt>.</p>
+    <li>A specific test or test directory can be run with:</li>
+
+<div class="doc_code">
+<pre>
+% llvm-lit test/path/to/test
+</pre>
+</div>
+
+</ol>
 
 </div>
 
@@ -286,7 +241,7 @@
 
 <div class="doc_code">
 <pre>
-% llvm-gcc -c hello.c -emit-llvm -o hello.bc
+% clang -c hello.c -emit-llvm -o hello.bc
 </pre>
 </div>
 
@@ -295,23 +250,27 @@
          facilities that it required.  You can execute this file directly using
          <tt>lli</tt> tool, compile it to native assembly with the <tt>llc</tt>,
          optimize or analyze it further with the <tt>opt</tt> tool, etc.</p>
-      
-      <p><b>Note: while you cannot do this step on Windows, you can do it on a
-         Unix system and transfer <tt>hello.bc</tt> to Windows.  Important:
-         transfer as a binary file!</b></p></li>
+
+      <p>Alternatively you can directly output an executable with clang with:
+      </p>
+
+<div class="doc_code">
+<pre>
+% clang hello.c -o hello.exe
+</pre>
+</div>
+
+  <p>The <tt>-o hello.exe</tt> is required because clang currently outputs
+  <tt>a.out</tt> when neither <tt>-o</tt> nor <tt>-c</tt> are given.</p>
 
   <li><p>Run the program using the just-in-time compiler:</p>
-      
+
 <div class="doc_code">
 <pre>
 % lli hello.bc
 </pre>
 </div>
 
-      <p>Note: this will only work for trivial C programs.  Non-trivial programs
-         (and any C++ program) will have dependencies on the GCC runtime that
-         won't be satisfied by the Microsoft runtime libraries.</p></li>
-
   <li><p>Use the <tt>llvm-dis</tt> utility to take a look at the LLVM assembly
       code:</p>
 
@@ -321,31 +280,27 @@
 </pre>
 </div></li>
 
-  <li><p>Compile the program to C using the LLC code generator:</p>
+  <li><p>Compile the program to object code using the LLC code generator:</p>
 
 <div class="doc_code">
 <pre>
-% llc -march=c hello.bc
+% llc -filetype=obj hello.bc
 </pre>
 </div></li>
 
-  <li><p>Compile to binary using Microsoft C:</p>
+  <li><p>Link to binary using Microsoft link:</p>
 
 <div class="doc_code">
 <pre>
-% cl hello.cbe.c
+% link hello.obj -defaultlib:libcmt
 </pre>
 </div>
 
-    <p>Note: this will only work for trivial C programs.  Non-trivial programs
-      (and any C++ program) will have dependencies on the GCC runtime that won't
-      be satisfied by the Microsoft runtime libraries.</p></li>
-
   <li><p>Execute the native code program:</p>
 
 <div class="doc_code">
 <pre>
-% hello.cbe.exe
+% hello.exe
 </pre>
 </div></li>
 </ol>
@@ -360,17 +315,6 @@
 
 <div class="doc_text">
 
-  <ul>
-    <li>In Visual C++, if you are linking with the x86 target statically, the
-    linker will remove the x86 target library from your generated executable or
-    shared library because there are no references to it. You can force the
-    linker to include these references by using
-    <tt>"/INCLUDE:_X86TargetMachineModule"</tt> when linking. In the Visual
-    Studio IDE, this can be added in
-<tt>Project Properties->Linker->Input->Force Symbol References</tt>.
-    </li>
-  </ul>
-
 <p>If you are having problems building or using LLVM, or if you have any other
 general questions about LLVM, please consult the <a href="FAQ.html">Frequently
 Asked Questions</a> page.</p>

Modified: llvm/branches/wendling/eh/docs/GoldPlugin.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/GoldPlugin.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/GoldPlugin.html (original)
+++ llvm/branches/wendling/eh/docs/GoldPlugin.html Tue Oct 26 19:48:03 2010
@@ -55,7 +55,7 @@
 cd binutils
 cvs -z 9 -d :pserver:anoncvs at sourceware.org:/cvs/src login
 <em>{enter "anoncvs" as the password}</em>
-cvs -z 9 -d :pserver:anoncvs at sourceware.org:/cvs/src co src
+cvs -z 9 -d :pserver:anoncvs at sourceware.org:/cvs/src co binutils
 mkdir build
 cd build
 ../src/configure --enable-gold --enable-plugins
@@ -79,7 +79,7 @@
   the plugin <tt>.so</tt> file. To find out what link command <tt>gcc</tt>
   would run in a given situation, run <tt>gcc -v <em>[...]</em></tt> and look
   for the line where it runs <tt>collect2</tt>. Replace that with
-  <tt>ld-new -plugin /path/to/libLLVMgold.so</tt> to test it out. Once you're
+  <tt>ld-new -plugin /path/to/LLVMgold.so</tt> to test it out. Once you're
   ready to switch to using gold, backup your existing <tt>/usr/bin/ld</tt>
   then replace it with <tt>ld-new</tt>.</p>
   <p>You can produce bitcode files from <tt>llvm-gcc</tt> using
@@ -91,7 +91,7 @@
   linker, which is why you need gold to be the installed system linker in your
   path.</p>
   <p>If you want <tt>ar</tt> and <tt>nm</tt> to work seamlessly as well, install
-  <tt>libLLVMgold.so</tt> to <tt>/usr/lib/bfd-plugins</tt>. If you built your
+  <tt>LLVMgold.so</tt> to <tt>/usr/lib/bfd-plugins</tt>. If you built your
   own gold, be sure to install the <tt>ar</tt> and <tt>nm-new</tt> you built to
   <tt>/usr/bin</tt>.
   <p>
@@ -157,9 +157,9 @@
   bitcode, everything is in place for an easy to use LTO build of autotooled
   projects:</p>
   <ul>
-    <li>Follow the instructions <a href="#build">on how to build libLLVMgold.so</a>.</li>
+    <li>Follow the instructions <a href="#build">on how to build LLVMgold.so</a>.</li>
     <li>Install the newly built binutils to <tt>$PREFIX</tt></li>
-    <li>Copy <tt>Release/lib/libLLVMgold.so</tt> to
+    <li>Copy <tt>Release/lib/LLVMgold.so</tt> to
     <tt>$PREFIX/libexec/gcc/x86_64-unknown-linux-gnu/4.2.1/</tt> and
     <tt>$PREFIX/lib/bfd-plugins/</tt></li>
     <li>Set environment variables (<tt>$PREFIX</tt> is where you installed llvm-gcc and

Modified: llvm/branches/wendling/eh/docs/LangRef.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/LangRef.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/LangRef.html (original)
+++ llvm/branches/wendling/eh/docs/LangRef.html Tue Oct 26 19:48:03 2010
@@ -25,6 +25,7 @@
           <li><a href="#linkage_private">'<tt>private</tt>' Linkage</a></li>
           <li><a href="#linkage_linker_private">'<tt>linker_private</tt>' Linkage</a></li>
           <li><a href="#linkage_linker_private_weak">'<tt>linker_private_weak</tt>' Linkage</a></li>
+          <li><a href="#linkage_linker_private_weak_def_auto">'<tt>linker_private_weak_def_auto</tt>' Linkage</a></li>
           <li><a href="#linkage_internal">'<tt>internal</tt>' Linkage</a></li>
           <li><a href="#linkage_available_externally">'<tt>available_externally</tt>' Linkage</a></li>
           <li><a href="#linkage_linkonce">'<tt>linkonce</tt>' Linkage</a></li>
@@ -61,6 +62,7 @@
         <ol>
           <li><a href="#t_integer">Integer Type</a></li>
           <li><a href="#t_floating">Floating Point Types</a></li>
+          <li><a href="#t_x86mmx">X86mmx Type</a></li>
           <li><a href="#t_void">Void Type</a></li>
           <li><a href="#t_label">Label Type</a></li>
           <li><a href="#t_metadata">Metadata Type</a></li>
@@ -73,7 +75,6 @@
               <li><a href="#t_array">Array Type</a></li>
               <li><a href="#t_struct">Structure Type</a></li>
               <li><a href="#t_pstruct">Packed Structure Type</a></li>
-              <li><a href="#t_union">Union Type</a></li>
               <li><a href="#t_vector">Vector Type</a></li>
             </ol>
           </li>
@@ -491,20 +492,21 @@
    the "hello world" module:</p>
 
 <pre class="doc_code">
-<i>; Declare the string constant as a global constant.</i>
-<a href="#identifiers">@.LC0</a> = <a href="#linkage_internal">internal</a> <a href="#globalvars">constant</a> <a href="#t_array">[13 x i8]</a> c"hello world\0A\00"    <i>; [13 x i8]*</i>
+<i>; Declare the string constant as a global constant.</i> 
+<a href="#identifiers">@.LC0</a> = <a href="#linkage_internal">internal</a> <a href="#globalvars">constant</a> <a href="#t_array">[13 x i8]</a> c"hello world\0A\00"      <i>; [13 x i8]*</i> 
 
-<i>; External declaration of the puts function</i>
-<a href="#functionstructure">declare</a> i32 @puts(i8*)                                     <i>; i32 (i8*)* </i>
+<i>; External declaration of the puts function</i> 
+<a href="#functionstructure">declare</a> i32 @puts(i8*)                                      <i>; i32 (i8*)* </i> 
 
 <i>; Definition of main function</i>
-define i32 @main() {                                        <i>; i32()* </i>
-  <i>; Convert [13 x i8]* to i8  *...</i>
-  %cast210 = <a href="#i_getelementptr">getelementptr</a> [13 x i8]* @.LC0, i64 0, i64 0   <i>; i8*</i>
-
-  <i>; Call puts function to write out the string to stdout.</i>
-  <a href="#i_call">call</a> i32 @puts(i8* %cast210)                             <i>; i32</i>
-  <a href="#i_ret">ret</a> i32 0<br>}
+define i32 @main() {   <i>; i32()* </i> 
+  <i>; Convert [13 x i8]* to i8  *...</i> 
+  %cast210 = <a href="#i_getelementptr">getelementptr</a> [13 x i8]* @.LC0, i64 0, i64 0   <i>; i8*</i> 
+
+  <i>; Call puts function to write out the string to stdout.</i> 
+  <a href="#i_call">call</a> i32 @puts(i8* %cast210)           <i>; i32</i> 
+  <a href="#i_ret">ret</a> i32 0 
+}
 
 <i>; Named metadata</i>
 !1 = metadata !{i32 41}
@@ -556,6 +558,15 @@
       linker. The symbols are removed by the linker from the final linked image
       (executable or dynamic library).</dd>
 
+  <dt><tt><b><a name="linkage_linker_private_weak_def_auto">linker_private_weak_def_auto</a></b></tt></dt>
+  <dd>Similar to "<tt>linker_private_weak</tt>", but it's known that the address
+      of the object is not taken. For instance, functions that had an inline
+      definition, but the compiler decided not to inline it. Note,
+      unlike <tt>linker_private</tt> and <tt>linker_private_weak</tt>,
+      <tt>linker_private_weak_def_auto</tt> may have only <tt>default</tt>
+      visibility.  The symbols are removed by the linker from the final linked
+      image (executable or dynamic library).</dd>
+
   <dt><tt><b><a name="linkage_internal">internal</a></b></tt></dt>
   <dd>Similar to private, but the value shows as a local symbol
       (<tt>STB_LOCAL</tt> in the case of ELF) in the object file. This
@@ -788,7 +799,7 @@
 </pre>
 
 <p>You may give a name to any <a href="#typesystem">type</a> except
-   "<a href="t_void">void</a>".  Type name aliases may be used anywhere a type
+   "<a href="#t_void">void</a>".  Type name aliases may be used anywhere a type
    is expected with the syntax "%mytype".</p>
 
 <p>Note that type names are aliases for the structural type that they indicate,
@@ -1120,6 +1131,14 @@
       function into callers whenever possible, ignoring any active inlining size
       threshold for this caller.</dd>
 
+  <dt><tt><b>hotpatch</b></tt></dt>
+  <dd>This attribute indicates that the function should be 'hotpatchable',
+      meaning the function can be patched and/or hooked even while it is
+      loaded into memory. On x86, the function prologue will be preceded
+      by six bytes of padding and will begin with a two-byte instruction.
+      Most of the functions in the Windows system DLLs in Windows XP SP2 or
+      higher were compiled in this fashion.</dd>
+
   <dt><tt><b>inlinehint</b></tt></dt>
   <dd>This attribute indicates that the source code contained a hint that inlining
       this function is desirable (such as the "inline" keyword in C/C++).  It
@@ -1464,7 +1483,6 @@
           <a href="#t_pointer">pointer</a>,
           <a href="#t_vector">vector</a>,
           <a href="#t_struct">structure</a>,
-          <a href="#t_union">union</a>,
           <a href="#t_array">array</a>,
           <a href="#t_label">label</a>,
           <a href="#t_metadata">metadata</a>.
@@ -1475,6 +1493,7 @@
       <td><a href="#t_label">label</a>,
           <a href="#t_void">void</a>,
           <a href="#t_floating">floating point</a>,
+          <a href="#t_x86mmx">x86mmx</a>,
           <a href="#t_metadata">metadata</a>.</td>
     </tr>
     <tr>
@@ -1484,7 +1503,6 @@
           <a href="#t_pointer">pointer</a>,
           <a href="#t_struct">structure</a>,
           <a href="#t_pstruct">packed structure</a>,
-          <a href="#t_union">union</a>,
           <a href="#t_vector">vector</a>,
           <a href="#t_opaque">opaque</a>.
       </td>
@@ -1563,6 +1581,21 @@
 </div>
 
 <!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="t_x86mmx">X86mmx Type</a> </div>
+
+<div class="doc_text">
+
+<h5>Overview:</h5>
+<p>The x86mmx type represents a value held in an MMX register on an x86 machine.  The operations allowed on it are quite limited:  parameters and return values, load and store, and bitcast.  User-specified MMX instructions are represented as intrinsic or asm calls with arguments and/or results of this type.  There are no arrays, vectors or constants of this type.</p>
+
+<h5>Syntax:</h5>
+<pre>
+  x86mmx
+</pre>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection"> <a name="t_void">Void Type</a> </div>
 
 <div class="doc_text">
@@ -1632,8 +1665,8 @@
 
 <p>Aggregate Types are a subset of derived types that can contain multiple
   member types. <a href="#t_array">Arrays</a>,
-  <a href="#t_struct">structs</a>, <a href="#t_vector">vectors</a> and
-  <a href="#t_union">unions</a> are aggregate types.</p>
+  <a href="#t_struct">structs</a>, and <a href="#t_vector">vectors</a> are
+  aggregate types.</p>
 
 </div>
 
@@ -1703,9 +1736,7 @@
 <h5>Overview:</h5>
 <p>The function type can be thought of as a function signature.  It consists of
    a return type and a list of formal parameter types. The return type of a
-   function type is a scalar type, a void type, a struct type, or a union
-   type.  If the return type is a struct type then all struct elements must be
-   of first class types, and the struct must have at least one element.</p>
+   function type is a first class type or a void type.</p>
 
 <h5>Syntax:</h5>
 <pre>
@@ -1827,53 +1858,6 @@
 </div>
 
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_union">Union Type</a> </div>
-
-<div class="doc_text">
-
-<h5>Overview:</h5>
-<p>A union type describes an object with size and alignment suitable for
-   an object of any one of a given set of types (also known as an "untagged"
-   union). It is similar in concept and usage to a
-   <a href="#t_struct">struct</a>, except that all members of the union
-   have an offset of zero. The elements of a union may be any type that has a
-   size. Unions must have at least one member - empty unions are not allowed.
-   </p>
-
-<p>The size of the union as a whole will be the size of its largest member,
-   and the alignment requirements of the union as a whole will be the largest
-   alignment requirement of any member.</p>
-
-<p>Union members are accessed using '<tt><a href="#i_load">load</a></tt> and
-   '<tt><a href="#i_store">store</a></tt>' by getting a pointer to a field with
-   the '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.
-   Since all members are at offset zero, the getelementptr instruction does
-   not affect the address, only the type of the resulting pointer.</p>
-
-<h5>Syntax:</h5>
-<pre>
-  union { <type list> }
-</pre>
-
-<h5>Examples:</h5>
-<table class="layout">
-  <tr class="layout">
-    <td class="left"><tt>union { i32, i32*, float }</tt></td>
-    <td class="left">A union of three types: an <tt>i32</tt>, a pointer to
-      an <tt>i32</tt>, and a <tt>float</tt>.</td>
-  </tr><tr class="layout">
-    <td class="left">
-      <tt>union { float, i32 (i32) * }</tt></td>
-    <td class="left">A union, where the first element is a <tt>float</tt> and the
-      second element is a <a href="#t_pointer">pointer</a> to a
-      <a href="#t_function">function</a> that takes an <tt>i32</tt>, returning
-      an <tt>i32</tt>.</td>
-  </tr>
-</table>
-
-</div>
-
-<!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>
 
 <div class="doc_text">
@@ -1934,8 +1918,9 @@
   < <# elements> x <elementtype> >
 </pre>
 
-<p>The number of elements is a constant integer value; elementtype may be any
-   integer or floating point type.</p>
+<p>The number of elements is a constant integer value larger than 0; elementtype
+   may be any integer or floating point type.  Vectors of size zero are not
+   allowed, and pointers are not allowed as the element type.</p>
 
 <h5>Examples:</h5>
 <table class="layout">
@@ -2091,6 +2076,7 @@
    they match the long double format on your target.  All hexadecimal formats
    are big-endian (sign bit at the left).</p>
 
+<p>There are no constants of type x86mmx.</p>
 </div>
 
 <!-- ======================================================================= -->
@@ -2114,14 +2100,6 @@
       the number and types of elements must match those specified by the
       type.</dd>
 
-  <dt><b>Union constants</b></dt>
-  <dd>Union constants are represented with notation similar to a structure with
-      a single element - that is, a single typed element surrounded
-      by braces (<tt>{}</tt>)).  For example: "<tt>{ i32 4 }</tt>".  The
-      <a href="#t_union">union type</a> can be initialized with a single-element
-      struct as long as the type of the struct element matches the type of
-      one of the union members.</dd>
-
   <dt><b>Array constants</b></dt>
   <dd>Array constants are represented with notation similar to array type
      definitions (a comma separated list of elements, surrounded by square
@@ -4150,7 +4128,7 @@
 
 <h5>Arguments:</h5>
 <p>The first operand of an '<tt>extractvalue</tt>' instruction is a value
-   of <a href="#t_struct">struct</a>, <a href="#t_union">union</a>  or
+   of <a href="#t_struct">struct</a> or
    <a href="#t_array">array</a> type.  The operands are constant indices to
    specify which value to extract in a similar manner as indices in a
    '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>
@@ -4184,7 +4162,7 @@
 
 <h5>Arguments:</h5>
 <p>The first operand of an '<tt>insertvalue</tt>' instruction is a value
-   of <a href="#t_struct">struct</a>, <a href="#t_union">union</a> or
+   of <a href="#t_struct">struct</a> or
    <a href="#t_array">array</a> type.  The second operand is a first-class
    value to insert.  The following operands are constant indices indicating
    the position at which to insert the value in a similar manner as indices in a
@@ -4417,12 +4395,12 @@
    indexes a value of the type pointed to (not necessarily the value directly
    pointed to, since the first index can be non-zero), etc. The first type
    indexed into must be a pointer value, subsequent types can be arrays,
-   vectors, structs and unions. Note that subsequent types being indexed into
+   vectors, and structs. Note that subsequent types being indexed into
    can never be pointers, since that would require loading the pointer before
    continuing calculation.</p>
 
 <p>The type of each index argument depends on the type it is indexing into.
-   When indexing into a (optionally packed) structure or union, only <tt>i32</tt>
+   When indexing into a (optionally packed) structure, only <tt>i32</tt>
    integer <b>constants</b> are allowed.  When indexing into an array, pointer
    or vector, integers of any width are allowed, and they are not required to be
    constant.</p>

Modified: llvm/branches/wendling/eh/docs/LinkTimeOptimization.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/LinkTimeOptimization.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/LinkTimeOptimization.html (original)
+++ llvm/branches/wendling/eh/docs/LinkTimeOptimization.html Tue Oct 26 19:48:03 2010
@@ -19,7 +19,7 @@
   </ul></li>
   <li><a href="#multiphase">Multi-phase communication between LLVM and linker</a>
   <ul>
-    <li><a href="#phase1">Phase 1 : Read LLVM Bytecode Files</a></li>
+    <li><a href="#phase1">Phase 1 : Read LLVM Bitcode Files</a></li>
     <li><a href="#phase2">Phase 2 : Symbol Resolution</a></li>
     <li><a href="#phase3">Phase 3 : Optimize Bitcode Files</a></li>
     <li><a href="#phase4">Phase 4 : Symbol Resolution after optimization</a></li>

Modified: llvm/branches/wendling/eh/docs/MakefileGuide.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/MakefileGuide.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/MakefileGuide.html (original)
+++ llvm/branches/wendling/eh/docs/MakefileGuide.html Tue Oct 26 19:48:03 2010
@@ -640,18 +640,18 @@
     generate dependencies when running the compiler. Use of this feature is
     discouraged and it may be removed at a later date.</dd>
     <dt><a name="ENABLE_OPTIMIZED"><tt>ENABLE_OPTIMIZED</tt></a></dt>
-    <dd>If set to any value, causes the build to generate optimized objects,
+    <dd>If set to 1, causes the build to generate optimized objects,
     libraries and executables. This alters the flags specified to the compilers
     and linkers. Generally debugging won't be a fun experience with an optimized
     build.</dd>
     <dt><a name="ENABLE_PROFILING"><tt>ENABLE_PROFILING</tt></a></dt>
-    <dd>If set to any value, causes the build to generate both optimized and 
+    <dd>If set to 1, causes the build to generate both optimized and 
     profiled objects, libraries and executables. This alters the flags specified
     to the compilers and linkers to ensure that profile data can be collected
     from the tools built. Use the <tt>gprof</tt> tool to analyze the output from
     the profiled tools (<tt>gmon.out</tt>).</dd>
     <dt><a name="DISABLE_ASSERTIONS"><tt>DISABLE_ASSERTIONS</tt></a></dt>
-    <dd>If set to any value, causes the build to disable assertions, even if 
+    <dd>If set to 1, causes the build to disable assertions, even if 
     building a debug or profile build.  This will exclude all assertion check
     code from the build. LLVM will execute faster, but with little help when
     things go wrong.</dd>

Modified: llvm/branches/wendling/eh/docs/Passes.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/Passes.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/Passes.html (original)
+++ llvm/branches/wendling/eh/docs/Passes.html Tue Oct 26 19:48:03 2010
@@ -167,6 +167,7 @@
 <tr><td><a href="#loop-unroll">-loop-unroll</a></td><td>Unroll loops</td></tr>
 <tr><td><a href="#loop-unswitch">-loop-unswitch</a></td><td>Unswitch loops</td></tr>
 <tr><td><a href="#loopsimplify">-loopsimplify</a></td><td>Canonicalize natural loops</td></tr>
+<tr><td><a href="#loweratomic">-loweratomic</a></td><td>Lower atomic intrinsics</td></tr>
 <tr><td><a href="#lowerinvoke">-lowerinvoke</a></td><td>Lower invoke and unwind, for unwindless code generators</td></tr>
 <tr><td><a href="#lowersetjmp">-lowersetjmp</a></td><td>Lower Set Jump</td></tr>
 <tr><td><a href="#lowerswitch">-lowerswitch</a></td><td>Lower SwitchInst's to branches</td></tr>
@@ -381,7 +382,7 @@
 
 <!-------------------------------------------------------------------------- -->
 <div class="doc_subsection">
-  <a name="dot-postdom">dot-postdom: Print post dominator tree of function to 'dot' file</a>
+  <a name="dot-postdom">-dot-postdom: Print post dominator tree of function to 'dot' file</a>
 </div>
 <div class="doc_text">
   <p>
@@ -393,7 +394,7 @@
 
 <!-------------------------------------------------------------------------- -->
 <div class="doc_subsection">
-  <a name="dot-postdom-only">dot-postdom-only: Print post dominator tree of function to 'dot' file
+  <a name="dot-postdom-only">-dot-postdom-only: Print post dominator tree of function to 'dot' file
   (with no function bodies)</a>
 </div>
 <div class="doc_text">
@@ -648,7 +649,7 @@
 <div class="doc_text">
   <p>
   This pass, only available in <code>opt</code>, prints the call graph to
-  standard output in a human-readable form.
+  standard error in a human-readable form.
   </p>
 </div>
 
@@ -659,7 +660,7 @@
 <div class="doc_text">
   <p>
   This pass, only available in <code>opt</code>, prints the SCCs of the call
-  graph to standard output in a human-readable form.
+  graph to standard error in a human-readable form.
   </p>
 </div>
 
@@ -670,7 +671,7 @@
 <div class="doc_text">
   <p>
   This pass, only available in <code>opt</code>, prints the SCCs of each
-  function CFG to standard output in a human-readable form.
+  function CFG to standard error in a human-readable form.
   </p>
 </div>
 
@@ -679,15 +680,13 @@
   <a name="print-dbginfo">-print-dbginfo: Print debug info in human readable form</a>
 </div>
 <div class="doc_text">
-  <p>Pass that prints instructions, and associated debug info:
+  <p>Pass that prints instructions, and associated debug info:</p>
   <ul>
   
   <li>source/line/col information</li>
   <li>original variable name</li>
   <li>original type name</li>
   </ul>
-
-  </p>
 </div>
 
 <!-------------------------------------------------------------------------- -->
@@ -1549,6 +1548,24 @@
 
 <!-------------------------------------------------------------------------- -->
 <div class="doc_subsection">
+  <a name="loweratomic">-loweratomic: Lower atomic intrinsics</a>
+</div>
+<div class="doc_text">
+  <p>
+  This pass lowers atomic intrinsics to non-atomic form for use in a known
+  non-preemptible environment.
+  </p>
+
+  <p>
+  The pass does not verify that the environment is non-preemptible (in
+  general this would require knowledge of the entire call graph of the
+  program including any libraries which may not be available in bitcode form);
+  it simply lowers every atomic intrinsic.
+  </p>
+</div>
+
+<!-------------------------------------------------------------------------- -->
+<div class="doc_subsection">
   <a name="lowerinvoke">-lowerinvoke: Lower invoke and unwind, for unwindless code generators</a>
 </div>
 <div class="doc_text">
@@ -1941,12 +1958,13 @@
   <a name="strip-debug-declare">-strip-debug-declare: Strip all llvm.dbg.declare intrinsics</a>
 </div>
 <div class="doc_text">
-  <p>This pass implements code stripping. Specifically, it can delete:
+  <p>This pass implements code stripping. Specifically, it can delete:</p>
   <ul>
   <li>names for virtual registers</li>
   <li>symbols for internal globals and functions</li>
   <li>debug information</li>
   </ul>
+  <p>
   Note that this transformation makes code much less readable, so it should
   only be used in situations where the 'strip' utility would be used, such as
   reducing code size or making it harder to reverse engineer code.
@@ -1958,12 +1976,13 @@
   <a name="strip-nondebug">-strip-nondebug: Strip all symbols, except dbg symbols, from a module</a>
 </div>
 <div class="doc_text">
-  <p>This pass implements code stripping. Specifically, it can delete:
+  <p>This pass implements code stripping. Specifically, it can delete:</p>
   <ul>
   <li>names for virtual registers</li>
   <li>symbols for internal globals and functions</li>
   <li>debug information</li>
   </ul>
+  <p>
   Note that this transformation makes code much less readable, so it should
   only be used in situations where the 'strip' utility would be used, such as
   reducing code size or making it harder to reverse engineer code.

Modified: llvm/branches/wendling/eh/docs/ProgrammersManual.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/ProgrammersManual.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/ProgrammersManual.html (original)
+++ llvm/branches/wendling/eh/docs/ProgrammersManual.html Tue Oct 26 19:48:03 2010
@@ -269,9 +269,9 @@
 
 <ol>
 
-<li><a href="http://www.dinkumware.com/refxcpp.html">Dinkumware C++ Library
-reference</a> - an excellent reference for the STL and other parts of the
-standard C++ library.</li>
+<li><a href="http://www.dinkumware.com/manuals/#Standard C++ Library">Dinkumware
+C++ Library reference</a> - an excellent reference for the STL and other parts
+of the standard C++ library.</li>
 
 <li><a href="http://www.tempest-sw.com/cpp/">C++ In a Nutshell</a> - This is an
 O'Reilly book in the making.  It has a decent Standard Library
@@ -309,8 +309,6 @@
 <div class="doc_text">
 
 <ol>
-<li><a href="http://www.psc.edu/%7Esemke/cvs_branches.html">CVS
-Branch and Tag Primer</a></li>
 <li><a href="http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html">Using
 static and shared libraries across platforms</a></li>
 </ol>
@@ -1436,7 +1434,7 @@
 
 <p>The StringMap is very fast for several reasons: quadratic probing is very
 cache efficient for lookups, the hash value of strings in buckets is not
-recomputed when lookup up an element, StringMap rarely has to touch the
+recomputed when looking up an element, StringMap rarely has to touch the
 memory for unrelated objects when looking up a value (even when hash collisions
 happen), hash table growth does not recompute the hash values for strings
 already in the table, and each pair in the map is store in a single allocation

Modified: llvm/branches/wendling/eh/docs/ReleaseNotes.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/ReleaseNotes.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/ReleaseNotes.html (original)
+++ llvm/branches/wendling/eh/docs/ReleaseNotes.html Tue Oct 26 19:48:03 2010
@@ -3,6 +3,7 @@
 <html>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta encoding="utf8">
   <link rel="stylesheet" href="llvm.css" type="text/css">
   <title>LLVM 2.8 Release Notes</title>
 </head>
@@ -19,7 +20,6 @@
   <li><a href="#externalproj">External Projects Using LLVM 2.8</a></li>
   <li><a href="#whatsnew">What's New in LLVM 2.8?</a></li>
   <li><a href="GettingStarted.html">Installation Instructions</a></li>
-  <li><a href="#portability">Portability and Supported Platforms</a></li>
   <li><a href="#knownproblems">Known Problems</a></li>
   <li><a href="#additionalinfo">Additional Information</a></li>
 </ol>
@@ -28,11 +28,13 @@
   <p>Written by the <a href="http://llvm.org">LLVM Team</a></p>
 </div>
 
+<!--
 <h1 style="color:red">These are in-progress notes for the upcoming LLVM 2.8
 release.<br>
 You may prefer the
 <a href="http://llvm.org/releases/2.7/docs/ReleaseNotes.html">LLVM 2.7
 Release Notes</a>.</h1>
+-->
 
 <!-- *********************************************************************** -->
 <div class="doc_section">
@@ -66,24 +68,20 @@
 Almost dead code.
   include/llvm/Analysis/LiveValues.h => Dan
   lib/Transforms/IPO/MergeFunctions.cpp => consider for 2.8.
-  llvm/Analysis/PointerTracking.h => Edwin wants this, consider for 2.8.
-  ABCD, GEPSplitterPass
-  MSIL backend?
-  lib/Transforms/Utils/SSI.cpp  -> ABCD depends on it.
+  GEPSplitterPass
 -->
  
    
-<!-- Features that need text if they're finished for 2.8:
+<!-- Features that need text if they're finished for 2.9:
   combiner-aa?
   strong phi elim
-  llvm.dbg.value: variable debug info for optimized code
   loop dependence analysis
+  TBAA
+  CorrelatedValuePropagation
  -->
-
- <!-- for announcement email:
- Logo web page.
- Many new papers added to /pubs/
-   -->
+ 
+ <!-- Announcement, lldb, libc++ -->
+ 
 
 <!-- *********************************************************************** -->
 <div class="doc_section">
@@ -116,13 +114,32 @@
 standards, fast compilation, and low memory use. Like LLVM, Clang provides a
 modular, library-based architecture that makes it suitable for creating or
 integrating with other development tools. Clang is considered a
-production-quality compiler for C and Objective-C on x86 (32- and 64-bit).</p>
+production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86
+(32- and 64-bit), and for darwin-arm targets.</p>
 
 <p>In the LLVM 2.8 time-frame, the Clang team has made many improvements:</p>
 
-<ul>
-
-</ul>
+  <ul>
+    <li>Clang C++ is now feature-complete with respect to the ISO C++ 1998 and 2003 standards.</li>
+    <li>Added support for Objective-C++.</li>
+    <li>Clang now uses LLVM-MC to directly generate object code and to parse inline assembly (on Darwin).</li>
+    <li>Introduced many new warnings, including <code>-Wmissing-field-initializers</code>, <code>-Wshadow</code>, <code>-Wno-protocol</code>, <code>-Wtautological-compare</code>, <code>-Wstrict-selector-match</code>, <code>-Wcast-align</code>, <code>-Wunused</code> improvements, and greatly improved format-string checking.</li>
+    <li>Introduced the "libclang" library, a C interface to Clang intended to support IDE clients.</li>
+    <li>Added support for <code>#pragma GCC visibility</code>, <code>#pragma align</code>, and others.</li>
+    <li>Added support for SSE, AVX, ARM NEON, and AltiVec.</li>
+    <li>Improved support for many Microsoft extensions.</li>
+    <li>Implemented support for blocks in C++.</li>
+    <li>Implemented precompiled headers for C++.</li>
+    <li>Improved abstract syntax trees to retain more accurate source information.</li>
+    <li>Added driver support for handling LLVM IR and bitcode files directly.</li>
+    <li>Major improvements to compiler correctness for exception handling.</li>
+    <li>Improved generated code quality in some areas:
+      <ul>
+        <li>Good code generation for X86-32 and X86-64 ABI handling.</li>
+        <li>Improved code generation for bit-fields, although important work remains.</li>
+      </ul>
+    </li>
+  </ul>
 </div>
 
 <!--=========================================================================-->
@@ -139,27 +156,64 @@
    future</a>!).  The tool is very good at finding bugs that occur on specific
    paths through code, such as on error conditions.</p>
 
-<p>In the LLVM 2.8 time-frame, 
+<p>The LLVM 2.8 release fixes a number of bugs and slightly improves precision
+   over 2.7, but there are no major new features in the release. 
 </p>
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="vmkit">VMKit: JVM/CLI Virtual Machine Implementation</a>
+<a name="dragonegg">DragonEgg: llvm-gcc ported to gcc-4.5</a>
 </div>
 
 <div class="doc_text">
 <p>
-The <a href="http://vmkit.llvm.org/">VMKit project</a> is an implementation of
-a JVM and a CLI Virtual Machine (Microsoft .NET is an
-implementation of the CLI) using LLVM for static and just-in-time
-compilation.</p>
+<a href="http://dragonegg.llvm.org/">DragonEgg</a> is a port of llvm-gcc to
+gcc-4.5.  Unlike llvm-gcc, dragonegg in theory does not require any gcc-4.5
+modifications whatsoever (currently one small patch is needed) thanks to the
+new <a href="http://gcc.gnu.org/wiki/plugins">gcc plugin architecture</a>.
+DragonEgg is a gcc plugin that makes gcc-4.5 use the LLVM optimizers and code
+generators instead of gcc's, just like with llvm-gcc.
+</p>
+
+<p>
+DragonEgg is still a work in progress, but it is able to compile a lot of code,
+for example all of gcc, LLVM and clang.  Currently Ada, C, C++ and Fortran work
+well, while all other languages either don't work at all or only work poorly.
+For the moment only the x86-32 and x86-64 targets are supported, and only on
+linux and darwin (darwin may need additional gcc patches).
+</p>
+
+<p>
+The 2.8 release has the following notable changes:
+<ul>
+<li>The plugin loads faster due to exporting fewer symbols.</li>
+<li>Additional vector operations such as addps256 are now supported.</li>
+<li>Ada global variables with no initial value are no longer zero initialized,
+resulting in better optimization.</li>
+<li>The '-fplugin-arg-dragonegg-enable-gcc-optzns' flag now runs all gcc
+optimizers, rather than just a handful.</li>
+<li>Fortran programs using common variables now link correctly.</li>
+<li>GNU OMP constructs no longer crash the compiler.</li>
+</ul>
 
-<p>With the release of LLVM 2.8, ...</p>
+</div>
 
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="vmkit">VMKit: JVM/CLI Virtual Machine Implementation</a>
 </div>
 
+<div class="doc_text">
+<p>
+The <a href="http://vmkit.llvm.org/">VMKit project</a> is an implementation of
+a Java Virtual Machine (Java VM or JVM) that uses LLVM for static and
+just-in-time compilation.  As of LLVM 2.8, VMKit now supports copying garbage
+collectors, and can be configured to use MMTk's copy mark-sweep garbage
+collector.  In LLVM 2.8, the VMKit .NET VM is no longer being maintained.
+</p>
+</div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
@@ -179,67 +233,91 @@
 
 <p>
 All of the code in the compiler-rt project is available under the standard LLVM
-License, a "BSD-style" license.  New in LLVM 2.8: 
-
-Soft float support
-</p>
+License, a "BSD-style" license.  New in LLVM 2.8, compiler_rt now supports 
+soft floating point (for targets that don't have a real floating point unit),
+and includes an extensive testsuite for the "blocks" language feature and the
+blocks runtime included in compiler_rt.</p>
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="dragonegg">DragonEgg: llvm-gcc ported to gcc-4.5</a>
+<a name="lldb">LLDB: Low Level Debugger</a>
 </div>
 
 <div class="doc_text">
 <p>
-<a href="http://dragonegg.llvm.org/">DragonEgg</a> is a port of llvm-gcc to
-gcc-4.5.  Unlike llvm-gcc, which makes many intrusive changes to the underlying
-gcc-4.2 code, dragonegg in theory does not require any gcc-4.5 modifications
-whatsoever (currently one small patch is needed).  This is thanks to the new
-<a href="http://gcc.gnu.org/wiki/plugins">gcc plugin architecture</a>, which
-makes it possible to modify the behaviour of gcc at runtime by loading a plugin,
-which is nothing more than a dynamic library which conforms to the gcc plugin
-interface.  DragonEgg is a gcc plugin that causes the LLVM optimizers to be run
-instead of the gcc optimizers, and the LLVM code generators instead of the gcc
-code generators, just like llvm-gcc.  To use it, you add
-"-fplugin=path/dragonegg.so" to the gcc-4.5 command line, and gcc-4.5 magically
-becomes llvm-gcc-4.5!
-</p>
+<a href="http://lldb.llvm.org/">LLDB</a> is a brand new member of the LLVM
+umbrella of projects. LLDB is a next generation, high-performance debugger. It
+is built as a set of reusable components which highly leverage existing
+libraries in the larger LLVM Project, such as the Clang expression parser, the
+LLVM disassembler and the LLVM JIT.</p>
 
 <p>
-DragonEgg is still a work in progress.  Currently C works very well, while C++,
-Ada and Fortran work fairly well.  All other languages either don't work at all,
-or only work poorly.  For the moment only the x86-32 and x86-64 targets are
-supported, and only on linux and darwin (darwin needs an additional gcc patch).
+LLDB is in early development and not included as part of the LLVM 2.8 release,
+but is mature enough to support basic debugging scenarios on Mac OS X in C,
+Objective-C and C++.  We'd really like help extending and expanding LLDB to 
+support new platforms, new languages, new architectures, and new features.
 </p>
 
+</div>
+
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="libc++">libc++: C++ Standard Library</a>
+</div>
+
+<div class="doc_text">
+<p>
+<a href="http://libcxx.llvm.org/">libc++</a> is another new member of the LLVM
+family.  It is an implementation of the C++ standard library, written from the
+ground up to specifically target the forthcoming C++'0X standard and focus on
+delivering great performance.</p>
+
 <p>
-2.8 status here.
+As of the LLVM 2.8 release, libc++ is virtually feature complete, but would
+benefit from more testing and better integration with Clang++.  It is also
+looking forward to the C++ committee finalizing the C++'0x standard.
 </p>
 
 </div>
 
 
+
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="mc">llvm-mc: Machine Code Toolkit</a>
+<a name="klee">KLEE: A Symbolic Execution Virtual Machine</a>
 </div>
 
 <div class="doc_text">
 <p>
-The LLVM Machine Code (aka MC) sub-project of LLVM was created to solve a number
-of problems in the realm of assembly, disassembly, object file format handling,
-and a number of other related areas that CPU instruction-set level tools work
-in. It is a sub-project of LLVM which provides it with a number of advantages
-over other compilers that do not have tightly integrated assembly-level tools.
-For a gentle introduction, please see the <a
-href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">Intro to the
-LLVM MC Project Blog Post</a>.
+<a href="http://klee.llvm.org/">KLEE</a> is a symbolic execution framework for
+programs in LLVM bitcode form. KLEE tries to symbolically evaluate "all" paths
+through the application and records state transitions that lead to fault
+states. This allows it to construct testcases that lead to faults and can even
+be used to verify some algorithms.
 </p>
 
-<p>2.8 status here</p>
-</div>	
+<p>Although KLEE does not have any major new features as of 2.8, we have made
+various minor improvements, particular to ease development:</p>
+<ul>
+  <li>Added support for LLVM 2.8. KLEE currently maintains compatibility with
+    LLVM 2.6, 2.7, and 2.8.</li>
+  <li>Added a buildbot for 2.6, 2.7, and trunk. A 2.8 buildbot will be coming
+    soon following release.</li>
+  <li>Fixed many C++ code issues to allow building with Clang++. Mostly
+    complete, except for the version of MiniSAT which is inside the KLEE STP
+    version.</li>
+  <li>Improved support for building with separate source and build
+    directories.</li>
+  <li>Added support for "long double" on x86.</li>
+  <li>Initial work on KLEE support for using 'lit' test runner instead of
+    DejaGNU.</li>
+  <li>Added <tt>configure</tt> support for using an external version of
+    STP.</li>
+</ul>
+
+</div>
 
 
 <!-- *********************************************************************** -->
@@ -255,194 +333,606 @@
    projects that have already been updated to work with LLVM 2.8.</p>
 </div>
 
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="tce">TTA-based Codesign Environment (TCE)</a>
+</div>
+
+<div class="doc_text">
+<p>
+<a href="http://tce.cs.tut.fi/">TCE</a> is a toolset for designing
+application-specific processors (ASP) based on the Transport triggered
+architecture (TTA). The toolset provides a complete co-design flow from C/C++
+programs down to synthesizable VHDL and parallel program binaries. Processor
+customization points include the register files, function units, supported
+operations, and the interconnection network.</p>
+
+<p>TCE uses llvm-gcc/Clang and LLVM for C/C++ language support, target
+independent optimizations and also for parts of code generation. It generates
+new LLVM-based code generators "on the fly" for the designed TTA processors and
+loads them in to the compiler backend as runtime libraries to avoid per-target
+recompilation of larger parts of the compiler chain.</p>
 
-<!-- *********************************************************************** -->
-<div class="doc_section">
-  <a name="whatsnew">What's New in LLVM 2.8?</a>
 </div>
-<!-- *********************************************************************** -->
+
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="Horizon">Horizon Bytecode Compiler</a>
+</div>
 
 <div class="doc_text">
+<p>
+<a href="http://www.quokforge.org/projects/horizon">Horizon</a> is a bytecode
+language and compiler written on top of LLVM, intended for producing
+single-address-space managed code operating systems that
+run faster than the equivalent multiple-address-space C systems.
+More in-depth blurb is available on the <a 
+href="http://www.quokforge.org/projects/horizon/wiki/Wiki">wiki</a>.</p>
 
-<p>This release includes a huge number of bug fixes, performance tweaks and
-minor improvements.  Some of the major improvements and new features are listed
-in this section.
+</div>
+
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="clamav">Clam AntiVirus</a>
+</div>
+
+<div class="doc_text">
+<p>
+<a href="http://www.clamav.net">Clam AntiVirus</a> is an open source (GPL)
+anti-virus toolkit for UNIX, designed especially for e-mail scanning on mail
+gateways.  Since version 0.96 it has <a
+href="http://vrt-sourcefire.blogspot.com/2010/09/introduction-to-clamavs-low-level.html">bytecode
+signatures</a> that allow writing detections for complex malware. It
+uses LLVM's JIT to speed up the execution of bytecode on
+X86, X86-64, PPC32/64, falling back to its own interpreter otherwise.
+The git version was updated to work with LLVM 2.8.
 </p>
 
+<p>The <a
+href="http://git.clamav.net/gitweb?p=clamav-bytecode-compiler.git;a=blob_plain;f=docs/user/clambc-user.pdf">
+ClamAV bytecode compiler</a> uses Clang and LLVM to compile a C-like
+language, insert runtime checks, and generate ClamAV bytecode.</p>
+
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="orgchanges">LLVM Community Changes</a>
+<a name="pure">Pure</a>
 </div>
 
 <div class="doc_text">
+<p>
+<a href="http://pure-lang.googlecode.com/">Pure</a>
+is an algebraic/functional
+programming language based on term rewriting. Programs are collections
+of equations which are used to evaluate expressions in a symbolic
+fashion. Pure offers dynamic typing, eager and lazy evaluation, lexical
+closures, a hygienic macro system (also based on term rewriting),
+built-in list and matrix support (including list and matrix
+comprehensions) and an easy-to-use C interface. The interpreter uses
+LLVM as a backend to JIT-compile Pure programs to fast native code.</p>
 
-<p>In addition to changes to the code, between LLVM 2.7 and 2.8, a number of
-organization changes have happened:
-</p>
+<p>Pure versions 0.44 and later have been tested and are known to work with
+LLVM 2.8 (and continue to work with older LLVM releases >= 2.5).</p>
 
-<ul>
-</ul>
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="majorfeatures">Major New Features</a>
+<a name="GHC">Glasgow Haskell Compiler (GHC)</a>
 </div>
 
 <div class="doc_text">
+<p>
+<a href="http://www.haskell.org/ghc/">GHC</a> is an open source,
+state-of-the-art programming suite for
+Haskell, a standard lazy functional programming language. It includes
+an optimizing static compiler generating good code for a variety of
+platforms, together with an interactive system for convenient, quick
+development.</p>
+
+<p>In addition to the existing C and native code generators, GHC 7.0 now
+supports an <a
+href="http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/Backends/LLVM">LLVM
+code generator</a>. GHC supports LLVM 2.7 and later.</p>
 
-<p>LLVM 2.8 includes several major new capabilities:</p>
+</div>
 
-<ul>
-<li>.</li>
-</ul>
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="Clay">Clay Programming Language</a>
+</div>
+
+<div class="doc_text">
+<p>
+<a href="http://tachyon.in/clay/">Clay</a> is a new systems programming
+language that is specifically designed for generic programming. It makes
+generic programming very concise thanks to whole program type propagation. It
+uses LLVM as its backend.</p>
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="coreimprovements">LLVM IR and Core Improvements</a>
+<a name="llvm-py">llvm-py Python Bindings for LLVM</a>
 </div>
 
 <div class="doc_text">
-<p>LLVM IR has several new features for better support of new targets and that
-expose new optimization opportunities:</p>
+<p>
+<a href="http://www.mdevan.org/llvm-py/">llvm-py</a> has been updated to work
+with LLVM 2.8.  llvm-py provides Python bindings for LLVM, allowing you to write a
+compiler backend or a VM in Python.</p>
 
-<ul>
+</div>
 
-<li>LLVM 2.8 changes the internal order of operands in <a
-  href="http://llvm.org/doxygen/classllvm_1_1InvokeInst.html"><tt>InvokeInst</tt></a>
-  and <a href="http://llvm.org/doxygen/classllvm_1_1CallInst.html"><tt>CallInst</tt></a>.
-  To be portable across releases, resort to <tt>CallSite</tt> and the
-  high-level accessors, such as <tt>getCalledValue</tt> and <tt>setUnwindDest</tt>.
-</li>
-<li>
-  You can no longer pass use_iterators directly to cast<> (and similar), because
-  these routines tend to perform costly dereference operations more than once. You
-  have to dereference the iterators yourself and pass them in.
-</li>
 
-</ul>
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="FAUST">FAUST Real-Time Audio Signal Processing Language</a>
+</div>
+
+<div class="doc_text">
+<p>
+<a href="http://faust.grame.fr">FAUST</a> is a compiled language for real-time
+audio signal processing. The name FAUST stands for Functional AUdio STream. Its
+programming model combines two approaches: functional programming and block
+diagram composition. In addition with the C, C++, JAVA output formats, the
+Faust compiler can now generate LLVM bitcode, and works with LLVM 2.7 and
+2.8.</p>
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="optimizer">Optimizer Improvements</a>
+<a name="jade">Jade Just-in-time Adaptive Decoder Engine</a>
 </div>
 
 <div class="doc_text">
+<p><a 
+href="http://sourceforge.net/apps/trac/orcc/wiki/JadeDocumentation">Jade</a>
+(Just-in-time Adaptive Decoder Engine) is a generic video decoder engine using
+LLVM for just-in-time compilation of video decoder configurations. Those
+configurations are designed by MPEG Reconfigurable Video Coding (RVC) committee.
+MPEG RVC standard is built on a stream-based dataflow representation of
+decoders. It is composed of a standard library of coding tools written in
+RVC-CAL language and a dataflow configuration — block diagram —
+of a decoder.</p>
+
+<p>Jade project is hosted as part of the <a href="http://orcc.sf.net">Open 
+RVC-CAL Compiler</a> and requires it to translate the RVC-CAL standard library
+of video coding tools into an LLVM assembly code.</p>
 
-<p>In addition to a large array of minor performance tweaks and bug fixes, this
-release includes a few major enhancements and additions to the optimizers:</p>
+</div>
 
-<ul>
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="neko_llvm_jit">LLVM JIT for Neko VM</a>
+</div>
 
-<li></li>
+<div class="doc_text">
+<p><a href="http://github.com/vava/neko_llvm_jit">Neko LLVM JIT</a>
+replaces the standard Neko JIT with an LLVM-based implementation.  While not
+fully complete, it is already providing a 1.5x speedup on 64-bit systems.
+Neko LLVM JIT requires LLVM 2.8 or later.</p>
 
-</ul>
+</div>
 
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="crack">Crack Scripting Language</a>
 </div>
 
+<div class="doc_text">
+<p>
+<a href="http://code.google.com/p/crack-language/">Crack</a> aims to provide
+the ease of development of a scripting language with the performance of a
+compiled language. The language derives concepts from C++, Java and Python,
+incorporating object-oriented programming, operator overloading and strong
+typing.  Crack 0.2 works with LLVM 2.7, and the forthcoming Crack 0.2.1 release
+builds on LLVM 2.8.</p>
+
+</div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="executionengine">Interpreter and JIT Improvements</a>
+<a name="DresdenTM">Dresden TM Compiler (DTMC)</a>
 </div>
 
 <div class="doc_text">
+<p>
+<a href="http://tm.inf.tu-dresden.de">DTMC</a> provides support for 
+Transactional Memory, which is an easy-to-use and efficient way to synchronize 
+accesses to shared memory. Transactions can contain normal C/C++ code (e.g., 
+<code>__transaction { list.remove(x); x.refCount--; }</code>) and will be executed 
+virtually atomically and isolated from other transactions.</p>
 
-<ul>
-<li></li>
+</div>
 
-</ul>
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="Kai">Kai Programming Language</a>
+</div>
+
+<div class="doc_text">
+<p>
+<a href="http://www.oriontransfer.co.nz/research/kai">Kai</a> (Japanese 会 for
+meeting/gathering) is an experimental interpreter that provides a highly
+extensible runtime environment and explicit control over the compilation
+process. Programs are defined using nested symbolic expressions, which are all
+parsed into first-class values with minimal intrinsic semantics. Kai can
+generate optimised code at run-time (using LLVM) in order to exploit the nature
+of the underlying hardware and to integrate with external software libraries.
+It is a unique exploration into world of dynamic code compilation, and the
+interaction between high level and low level semantics.</p>
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="codegen">Target Independent Code Generator Improvements</a>
+<a name="OSL">OSL: Open Shading Language</a>
 </div>
 
 <div class="doc_text">
+<p>
+<a href="http://code.google.com/p/openshadinglanguage/">OSL</a> is a shading
+language designed for use in physically based renderers and in particular
+production rendering. By using LLVM instead of the interpreter, it was able to
+meet its performance goals (>= C-code) while retaining the benefits of
+runtime specialization and a portable high-level language.
+</p>
 
-<p>We have put a significant amount of work into the code generator
-infrastructure, which allows us to implement more aggressive algorithms and make
-it run faster:</p>
+</div>
+
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="whatsnew">What's New in LLVM 2.8?</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>This release includes a huge number of bug fixes, performance tweaks and
+minor improvements.  Some of the major improvements and new features are listed
+in this section.
+</p>
 
-<ul>
-<li>MachO writer works.</li>
-</ul>
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="x86">X86-32 and X86-64 Target Improvements</a>
+<a name="majorfeatures">Major New Features</a>
 </div>
 
 <div class="doc_text">
-<p>New features of the X86 target include:
-</p>
 
-<ul>
-<li>The X86 backend now supports holding X87 floating point stack values
-    in registers across basic blocks, dramatically improving performance of code
-    that uses long double, and when targetting CPUs that don't support SSE.</li>
+<p>LLVM 2.8 includes several major new capabilities:</p>
 
+<ul>
+<li>As mentioned above, <a href="#libc++">libc++</a> and <a 
+   href="#lldb">LLDB</a> are major new additions to the LLVM collective.</li>
+<li>LLVM 2.8 now has pretty decent support for debugging optimized code.  You
+    should be able to reliably get debug info for function arguments, assuming
+    that the value is actually available where you have stopped.</li>
+<li>A new 'llvm-diff' tool is available that does a semantic diff of .ll
+    files.</li>
+<li>The <a href="#mc">MC subproject</a> has made major progress in this release.
+    Direct .o file writing support for darwin/x86[-64] is now reliable and
+    support for other targets and object file formats are in progress.</li>
 </ul>
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="ARM">ARM Target Improvements</a>
+<a name="coreimprovements">LLVM IR and Core Improvements</a>
 </div>
 
 <div class="doc_text">
-<p>New features of the ARM target include:
-</p>
+<p>LLVM IR has several new features for better support of new targets and that
+expose new optimization opportunities:</p>
 
 <ul>
+<li>The <a href="LangRef.html#int_libc">memcpy, memmove, and memset</a>
+  intrinsics now take address space qualified pointers and a bit to indicate
+  whether the transfer is "<a href="LangRef.html#volatile">volatile</a>" or not.
+</li>
+<li>Per-instruction debug info metadata is much faster and uses less memory by
+    using the new DebugLoc class.</li>
+<li>LLVM IR now has a more formalized concept of "<a
+    href="LangRef.html#trapvalues">trap values</a>", which allow the optimizer
+    to optimize more aggressively in the presence of undefined behavior, while
+    still producing predictable results.</li>
+<li>LLVM IR now supports two new <a href="LangRef.html#linkage">linkage
+    types</a> (linker_private_weak and linker_private_weak_def_auto) which map
+    onto some obscure MachO concepts.</li>
+</ul>
+
+</div>
 
-<li></li>
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="optimizer">Optimizer Improvements</a>
+</div>
 
+<div class="doc_text">
+
+<p>In addition to a large array of minor performance tweaks and bug fixes, this
+release includes a few major enhancements and additions to the optimizers:</p>
+
+<ul>
+<li>As mentioned above, the optimizer now has support for updating debug
+   information as it goes.  A key aspect of this is the new <a
+   href="SourceLevelDebugging.html#format_common_value">llvm.dbg.value</a>
+   intrinsic.  This intrinsic represents debug info for variables that are
+   promoted to SSA values (typically by mem2reg or the -scalarrepl passes).</li>
+
+<li>The JumpThreading pass is now much more aggressive about implied value
+    relations, allowing it to thread conditions like "a == 4" when a is known to
+    be 13 in one of the predecessors of a block.  It does this in conjunction
+    with the new LazyValueInfo analysis pass.</li>
+<li>The new RegionInfo analysis pass identifies single-entry single-exit regions
+    in the CFG.  You can play with it with the "opt -regions -analyze" or
+    "opt -view-regions" commands.</li>
+<li>The loop optimizer has significantly improved strength reduction and analysis
+  capabilities.  Notably it is able to build on the trap value and signed
+  integer overflow information to optimize <= and >= loops.</li>
+<li>The CallGraphSCCPassManager now has some basic support for iterating within
+    an SCC when a optimizer devirtualizes a function call.  This allows inlining
+    through indirect call sites that are devirtualized by store-load forwarding
+    and other optimizations.</li>
+<li>The new <A href="Passes.html#loweratomic">-loweratomic</a> pass is available
+    to lower atomic instructions into their non-atomic form.  This can be useful
+    to optimize generic code that expects to run in a single-threaded
+    environment.</li>
 </ul>
 
+<!--
+<p>In addition to these features that are done in 2.8, there is preliminary
+   support in the release for Type Based Alias Analysis 
+  Preliminary work on TBAA but not usable in 2.8.
+  New CorrelatedValuePropagation pass, not on by default in 2.8 yet.
+-->
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="newapis">New Useful APIs</a>
+<a name="mc">MC Level Improvements</a>
 </div>
 
 <div class="doc_text">
+<p>
+The LLVM Machine Code (aka MC) subsystem was created to solve a number
+of problems in the realm of assembly, disassembly, object file format handling,
+and a number of other related areas that CPU instruction-set level tools work
+in.</p>
+
+<p>The MC subproject has made great leaps in LLVM 2.8.  For example, support for
+   directly writing .o files from LLC (and clang) now works reliably for
+   darwin/x86[-64] (including inline assembly support) and the integrated
+   assembler is turned on by default in Clang for these targets.  This provides
+   improved compile times among other things.</p>
+
+<ul>
+<li>The entire compiler has converted over to using the MCStreamer assembler API
+    instead of writing out a .s file textually.</li>
+<li>The "assembler parser" is far more mature than in 2.7, supporting a full
+    complement of directives, now supports assembler macros, etc.</li>
+<li>The "assembler backend" has been completed, including support for relaxation
+    relocation processing and all the other things that an assembler does.</li>
+<li>The MachO file format support is now fully functional and works.</li>
+<li>The MC disassembler now fully supports ARM and Thumb.  ARM assembler support
+    is still in early development though.</li>
+<li>The X86 MC assembler now supports the X86 AES and AVX instruction set.</li>
+<li>Work on ELF and COFF object files and ARM target support is well underway,
+    but isn't useful yet in LLVM 2.8.  Please contact the llvmdev mailing list
+    if you're interested in this.</li>
+</ul>
 
-<p>This release includes a number of new APIs that are used internally, which
-   may also be useful for external clients.
+<p>For more information, please see the <a
+href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">Intro to the
+LLVM MC Project Blog Post</a>.
 </p>
 
+</div>	
+
+
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="codegen">Target Independent Code Generator Improvements</a>
+</div>
+
+<div class="doc_text">
+
+<p>We have put a significant amount of work into the code generator
+infrastructure, which allows us to implement more aggressive algorithms and make
+it run faster:</p>
+
 <ul>
-<li></li>
+<li>The clang/gcc -momit-leaf-frame-pointer argument is now supported.</li>
+<li>The clang/gcc -ffunction-sections and -fdata-sections arguments are now
+    supported on ELF targets (like GCC).</li>
+<li>The MachineCSE pass is now tuned and on by default.  It eliminates common
+    subexpressions that are exposed when lowering to machine instructions.</li>
+<li>The "local" register allocator was replaced by a new "fast" register
+    allocator.  This new allocator (which is often used at -O0) is substantially
+    faster and produces better code than the old local register allocator.</li>
+<li>A new LLC "-regalloc=default" option is available, which automatically
+    chooses a register allocator based on the -O optimization level.</li>
+<li>The common code generator code was modified to promote illegal argument and
+    return value vectors to wider ones when possible instead of scalarizing
+    them.  For example, <3 x float> will now pass in one SSE register
+    instead of 3 on X86.  This generates substantially better code since the
+    rest of the code generator was already expecting this.</li>
+<li>The code generator uses a new "COPY" machine instruction.  This speeds up
+    the code generator and eliminates the need for targets to implement the 
+    isMoveInstr hook.  Also, the copyRegToReg hook was renamed to copyPhysReg
+    and simplified.</li>
+<li>The code generator now has a "LocalStackSlotPass", which optimizes stack
+    slot access for targets (like ARM) that have limited stack displacement
+    addressing.</li>
+<li>A new "PeepholeOptimizer" is available, which eliminates sign and zero
+    extends, and optimizes away compare instructions when the condition result
+    is available from a previous instruction.</li>
+<li>Atomic operations now get legalized into simpler atomic operations if not
+    natively supported, easing the implementation burden on targets.</li>
+<li>We have added two new bottom-up pre-allocation register pressure aware schedulers:
+<ol>
+<li>The hybrid scheduler schedules aggressively to minimize schedule length when registers are available and avoid overscheduling in high pressure situations.</li>
+<li>The instruction-level-parallelism scheduler schedules for maximum ILP when registers are available and avoid overscheduling in high pressure situations.</li>
+</ol></li>
+<li>The tblgen type inference algorithm was rewritten to be more consistent and
+     diagnose more target bugs.  If you have an out-of-tree backend, you may
+     find that it finds bugs in your target description.  This support also
+     allows limited support for writing patterns for instructions that return
+     multiple results (e.g. a virtual register and a flag result).  The 
+     'parallel' modifier in tblgen was removed, you should use the new support
+     for multiple results instead.</li>
+<li>A new (experimental) "-rendermf" pass is available which renders a
+    MachineFunction into HTML, showing live ranges and other useful
+    details.</li>
+<li>The new SubRegIndex tablegen class allows subregisters to be indexed
+    symbolically instead of numerically.  If your target uses subregisters you
+    will need to adapt to use SubRegIndex when you upgrade to 2.8.</li>
+<!-- SplitKit -->
+
+<li>The -fast-isel instruction selection path (used at -O0 on X86) was rewritten
+    to work bottom-up on basic blocks instead of top down.  This makes it
+    slightly faster (because the MachineDCE pass is not needed any longer) and
+    allows it to generate better code in some cases.</li>
+
 </ul>
+</div>
+
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="x86">X86-32 and X86-64 Target Improvements</a>
+</div>
 
+<div class="doc_text">
+<p>New features and major changes in the X86 target include:
+</p>
+
+<ul>
+<li>The X86 backend now supports holding X87 floating point stack values
+    in registers across basic blocks, dramatically improving performance of code
+    that uses long double, and when targeting CPUs that don't support SSE.</li>
+
+<li>The X86 backend now uses a SSEDomainFix pass to optimize SSE operations.  On
+    Nehalem ("Core i7") and newer CPUs there is a 2 cycle latency penalty on
+    using a register in a different domain than where it was defined. This pass
+    optimizes away these stalls.</li>
+
+<li>The X86 backend now promotes 16-bit integer operations to 32-bits when
+    possible. This avoids 0x66 prefixes, which are slow on some
+    microarchitectures and bloat the code on all of them.</li>
+
+<li>The X86 backend now supports the Microsoft "thiscall" calling convention,
+    and a <a href="LangRef.html#callingconv">calling convention</a> to support
+    <a href="#GHC">ghc</a>.</li>
+
+<li>The X86 backend supports a new "llvm.x86.int" intrinsic, which maps onto
+    the X86 "int $42" and "int3" instructions.</li>
+
+<li>At the IR level, the <2 x float> datatype is now promoted and passed
+    around as a <4 x float> instead of being passed and returned as an MMX
+    vector.  If you have a frontend that uses this, please pass and return a
+    <2 x i32> instead (using bitcasts).</li>
+
+<li>When printing .s files in verbose assembly mode (the default for clang -S),
+    the X86 backend now decodes X86 shuffle instructions and prints human
+    readable comments after the most inscrutable of them, e.g.:
+    
+<pre>
+  insertps $113, %xmm3, %xmm0 <i># xmm0 = zero,xmm0[1,2],xmm3[1]</i>
+  unpcklps %xmm1, %xmm0       <i># xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]</i>
+  pshufd   $1, %xmm1, %xmm1   <i># xmm1 = xmm1[1,0,0,0]</i>
+</pre>
+</li>
+        
+</ul>
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="otherimprovements">Other Improvements and New Features</a>
+<a name="ARM">ARM Target Improvements</a>
 </div>
 
 <div class="doc_text">
-<p>Other miscellaneous features include:</p>
+<p>New features of the ARM target include:
+</p>
 
 <ul>
-<li></li>
-</ul>
+<li>The ARM backend now optimizes tail calls into jumps.</li>
+<li>Scheduling is improved through the new list-hybrid scheduler as well
+    as through better modeling of structural hazards.</li>
+<li><a href="LangRef.html#int_fp16">Half float</a> instructions are now
+    supported.</li>
+<li>NEON support has been improved to model instructions which operate onto 
+    multiple consecutive registers more aggressively.  This avoids lots of
+    extraneous register copies.</li>
+<li>The ARM backend now uses a new "ARMGlobalMerge" pass, which merges several
+    global variables into one, saving extra address computation (all the global
+    variables can be accessed via same base address) and potentially reducing
+    register pressure.</li>
+
+<li>The ARM backend has received many minor improvements and tweaks which lead
+    to substantially better performance in a wide range of different scenarios.
+</li>
 
+<li>The ARM NEON intrinsics have been substantially reworked to reduce
+    redundancy and improve code generation.  Some of the major changes are:
+  <ol>
+  <li>
+    All of the NEON load and store intrinsics (llvm.arm.neon.vld* and
+    llvm.arm.neon.vst*) take an extra parameter to specify the alignment in bytes
+    of the memory being accessed.
+  </li>
+  <li>
+    The llvm.arm.neon.vaba intrinsic (vector absolute difference and
+    accumulate) has been removed.  This operation is now represented using
+    the llvm.arm.neon.vabd intrinsic (vector absolute difference) followed by a
+    vector add.
+  </li>
+  <li>
+    The llvm.arm.neon.vabdl and llvm.arm.neon.vabal intrinsics (lengthening
+    vector absolute difference with and without accumulation) have been removed.
+    They are represented using the llvm.arm.neon.vabd intrinsic (vector absolute
+    difference) followed by a vector zero-extend operation, and for vabal,
+    a vector add.
+  </li>
+  <li>
+    The llvm.arm.neon.vmovn intrinsic has been removed.  Calls of this intrinsic
+    are now replaced by vector truncate operations.
+  </li>
+  <li>
+    The llvm.arm.neon.vmovls and llvm.arm.neon.vmovlu intrinsics have been
+    removed.  They are now represented as vector sign-extend (vmovls) and
+    zero-extend (vmovlu) operations.
+  </li>
+  <li>
+    The llvm.arm.neon.vaddl*, llvm.arm.neon.vaddw*, llvm.arm.neon.vsubl*, and
+    llvm.arm.neon.vsubw* intrinsics (lengthening vector add and subtract) have
+    been removed.  They are replaced by vector add and vector subtract operations
+    where one (vaddw, vsubw) or both (vaddl, vsubl) of the operands are either
+    sign-extended or zero-extended.
+  </li>
+  <li>
+    The llvm.arm.neon.vmulls, llvm.arm.neon.vmullu, llvm.arm.neon.vmlal*, and
+    llvm.arm.neon.vmlsl* intrinsics (lengthening vector multiply with and without
+    accumulation and subtraction) have been removed.  These operations are now
+    represented as vector multiplications where the operands are either
+    sign-extended or zero-extended, followed by a vector add for vmlal or a
+    vector subtract for vmlsl.  Note that the polynomial vector multiply
+    intrinsic, llvm.arm.neon.vmullp, remains unchanged.
+  </li>
+  </ol>
+</li>
+
+</ul>
 </div>
 
 
@@ -458,48 +948,140 @@
 from the previous release.</p>
 
 <ul>
-
-<li>.</li>
+<li>The build configuration machinery changed the output directory names.  It
+    wasn't clear to many people that a "Release-Asserts" build was a release build
+    without asserts.  To make this more clear, "Release" does not include
+    assertions and "Release+Asserts" does (likewise, "Debug" and
+    "Debug+Asserts").</li>
+<li>The MSIL Backend was removed, it was unsupported and broken.</li>
+<li>The ABCD, SSI, and SCCVN passes were removed.  These were not fully
+    functional and their behavior has been or will be subsumed by the
+    LazyValueInfo  pass.</li>
+<li>The LLVM IR 'Union' feature was removed.  While this is a desirable feature
+    for LLVM IR to support, the existing implementation was half baked and
+    barely useful.  We'd really like anyone interested to resurrect the work and
+    finish it for a future release.</li>
+<li>If you're used to reading .ll files, you'll probably notice that .ll file
+    dumps don't produce #uses comments anymore.  To get them, run a .bc file
+    through "llvm-dis --show-annotations".</li>
+<li>Target triples are now stored in a normalized form, and all inputs from
+    humans are expected to be normalized by Triple::normalize before being
+    stored in a module triple or passed to another library.</li>
 </ul>
 
+
+
 <p>In addition, many APIs have changed in this release.  Some of the major LLVM
 API changes are:</p>
-
 <ul>
+<li>LLVM 2.8 changes the internal order of operands in <a
+  href="http://llvm.org/doxygen/classllvm_1_1InvokeInst.html"><tt>InvokeInst</tt></a>
+  and <a href="http://llvm.org/doxygen/classllvm_1_1CallInst.html"><tt>CallInst</tt></a>.
+  To be portable across releases, please use the <tt>CallSite</tt> class and the
+  high-level accessors, such as <tt>getCalledValue</tt> and
+  <tt>setUnwindDest</tt>.
+</li>
+<li>
+  You can no longer pass use_iterators directly to cast<> (and similar),
+  because these routines tend to perform costly dereference operations more
+  than once. You have to dereference the iterators yourself and pass them in.
+</li>
+<li>
+  llvm.memcpy.*, llvm.memset.*, llvm.memmove.* intrinsics take an extra
+  parameter now ("i1 isVolatile"), totaling 5 parameters, and the pointer
+  operands are now address-space qualified.
+  If you were creating these intrinsic calls and prototypes yourself (as opposed
+  to using Intrinsic::getDeclaration), you can use
+  UpgradeIntrinsicFunction/UpgradeIntrinsicCall to be portable across releases.
+</li>
+<li>
+  SetCurrentDebugLocation takes a DebugLoc now instead of a MDNode.
+  Change your code to use
+  SetCurrentDebugLocation(DebugLoc::getFromDILocation(...)).
+</li>
+<li>
+  The <tt>RegisterPass</tt> and <tt>RegisterAnalysisGroup</tt> templates are
+  considered deprecated, but continue to function in LLVM 2.8.  Clients are  
+  strongly advised to use the upcoming <tt>INITIALIZE_PASS()</tt> and
+  <tt>INITIALIZE_AG_PASS()</tt> macros instead.
+</li>
+<li>
+  The constructor for the Triple class no longer tries to understand odd triple
+  specifications.  Frontends should ensure that they only pass valid triples to
+  LLVM.  The Triple::normalize utility method has been added to help front-ends
+  deal with funky triples.
+</li>
+<li>
+  The signature of the <tt>GCMetadataPrinter::finishAssembly</tt> virtual
+  function changed: the <tt>raw_ostream</tt> and <tt>MCAsmInfo</tt> arguments
+  were dropped.  GC plugins which compute stack maps must be updated to avoid
+  having the old definition overload the new signature.
+</li>
+<li>
+  The signature of <tt>MemoryBuffer::getMemBuffer</tt> changed.  Unfortunately
+  calls intended for the old version still compile, but will not work correctly,
+  leading to a confusing error about an invalid header in the bitcode.
+</li>
+  
+<li>
+  Some APIs were renamed:
+  <ul>
+  <li>llvm_report_error -> report_fatal_error</li>
+  <li>llvm_install_error_handler -> install_fatal_error_handler</li>
+  <li>llvm::DwarfExceptionHandling -> llvm::JITExceptionHandling</li>
+  <li>VISIBILITY_HIDDEN -> LLVM_LIBRARY_VISIBILITY</li>
+  </ul>
+</li>
+
+<li>
+  Some public headers were renamed:
+  <ul>
+    <li><tt>llvm/Assembly/AsmAnnotationWriter.h</tt> was renamed
+    to <tt>llvm/Assembly/AssemblyAnnotationWriter.h</tt>
+    </li>
+  </ul>
 </ul>
 
 </div>
 
-
-
-<!-- *********************************************************************** -->
-<div class="doc_section">
-  <a name="portability">Portability and Supported Platforms</a>
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="devtree_changes">Development Infrastructure Changes</a>
 </div>
-<!-- *********************************************************************** -->
 
 <div class="doc_text">
 
-<p>LLVM is known to work on the following platforms:</p>
-
-<ul>
-<li>Intel and AMD machines (IA32, X86-64, AMD64, EMT-64) running Red Hat
-    Linux, Fedora Core, FreeBSD and AuroraUX (and probably other unix-like
-    systems).</li>
-<li>PowerPC and X86-based Mac OS X systems, running 10.4 and above in 32-bit
-    and 64-bit modes.</li>
-<li>Intel and AMD machines running on Win32 using MinGW libraries (native).</li>
-<li>Intel and AMD machines running on Win32 with the Cygwin libraries (limited
-    support is available for native builds with Visual C++).</li>
-<li>Sun x86 and AMD64 machines running Solaris 10, OpenSolaris 0906.</li>
-<li>Alpha-based machines running Debian GNU/Linux.</li>
+<p>This section lists changes to the LLVM development infrastructure. This
+mostly impacts users who actively work on LLVM or follow development on
+mainline, but may also impact users who leverage the LLVM build infrastructure
+or are interested in LLVM qualification.</p>
+
+<ul>
+  <li>The default for <tt>make check</tt> is now to use
+  the <a href="http://llvm.org/cmds/lit.html">lit</a> testing tool, which is
+  part of LLVM itself. You can use <tt>lit</tt> directly as well, or use
+  the <tt>llvm-lit</tt> tool which is created as part of a Makefile or CMake
+  build (and knows how to find the appropriate tools). See the <tt>lit</tt>
+  documentation and the <a href="http://blog.llvm.org/2009/12/lit-it.html">blog
+  post</a>, and <a href="http://llvm.org/bugs/show_bug.cgi?id=5217">PR5217</a>
+  for more information.</li>
+
+  <li>The LLVM <tt>test-suite</tt> infrastructure has a new "simple" test format
+  (<tt>make TEST=simple</tt>). The new format is intended to require only a
+  compiler and not a full set of LLVM tools. This makes it useful for testing
+  released compilers, for running the test suite with other compilers (for
+  performance comparisons), and makes sure that we are testing the compiler as
+  users would see it. The new format is also designed to work using reference
+  outputs instead of comparison to a baseline compiler, which makes it run much
+  faster and makes it less system dependent.</li>
+
+  <li>Significant progress has been made on a new interface to running the
+  LLVM <tt>test-suite</tt> (aka the LLVM "nightly tests") using
+  the <a href="http://llvm.org/docs/lnt">LNT</a> infrastructure. The LNT
+  interface to the <tt>test-suite</tt> brings significantly improved reporting
+  capabilities for monitoring the correctness and generated code quality
+  produced by LLVM over time.</li>
 </ul>
-
-<p>The core LLVM infrastructure uses GNU autoconf to adapt itself
-to the machine and operating system on which it is built.  However, minor
-porting may be required to get LLVM to work on new platforms.  We welcome your
-portability patches and reports of successful builds or error messages.</p>
-
 </div>
 
 <!-- *********************************************************************** -->
@@ -515,15 +1097,6 @@
 href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if
 there isn't already one.</p>
 
-<ul>    
-<li>LLVM will not correctly compile on Solaris and/or OpenSolaris
-using the stock GCC 3.x.x series 'out the box',
-See: <a href="GettingStarted.html#brokengcc">Broken versions of GCC and other tools</a>.
-However, A <a href="http://pkg.auroraux.org/GCC">Modern GCC Build</a>
-for x86/x86-64 has been made available from the third party AuroraUX Project
-that has been meticulously tested for bootstrapping LLVM & Clang.</li>
-</ul>
-
 </div>
 
 <!-- ======================================================================= -->
@@ -541,10 +1114,10 @@
 href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>
 
 <ul>
-<li>The MSIL, Alpha, SPU, MIPS, PIC16, Blackfin, MSP430, SystemZ and MicroBlaze
-    backends are experimental.</li>
-<li><tt>llc</tt> "<tt>-filetype=asm</tt>" (the default) is the only
-    supported value for this option.  XXX Update me</li>
+<li>The Alpha, Blackfin, CellSPU, MicroBlaze, MSP430, MIPS, SystemZ
+    and XCore backends are experimental.</li>
+<li><tt>llc</tt> "<tt>-filetype=obj</tt>" is experimental on all targets
+    other than darwin-i386 and darwin-x86_64.</li>
 </ul>
 
 </div>
@@ -652,6 +1225,9 @@
 
 <div class="doc_text">
 
+<p>The C backend has numerous problems and is not being actively maintained.
+Depending on it for anything serious is not advised.</p>
+
 <ul>
 <li><a href="http://llvm.org/PR802">The C backend has only basic support for
     inline assembly code</a>.</li>
@@ -667,69 +1243,28 @@
 
 <!-- ======================================================================= -->
 <div class="doc_subsection">
-  <a name="c-fe">Known problems with the llvm-gcc C and C++ front-end</a>
+  <a name="llvm-gcc">Known problems with the llvm-gcc front-end</a>
 </div>
 
 <div class="doc_text">
 
-<p>The only major language feature of GCC not supported by llvm-gcc is
-    the <tt>__builtin_apply</tt> family of builtins.   However, some extensions
-    are only supported on some targets.  For example, trampolines are only
-    supported on some targets (these are used when you take the address of a
-    nested function).</p>
-
-</div>
-
-<!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="fortran-fe">Known problems with the llvm-gcc Fortran front-end</a>
-</div>
-
-<div class="doc_text">
-<ul>
-<li>Fortran support generally works, but there are still several unresolved bugs
-    in <a href="http://llvm.org/bugs/">Bugzilla</a>.  Please see the
-    tools/gfortran component for details.</li>
-</ul>
-</div>
+<p>llvm-gcc is generally very stable for the C family of languages.  The only
+   major language feature of GCC not supported by llvm-gcc is the
+   <tt>__builtin_apply</tt> family of builtins.   However, some extensions
+   are only supported on some targets.  For example, trampolines are only
+   supported on some targets (these are used when you take the address of a
+   nested function).</p>
 
-<!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="ada-fe">Known problems with the llvm-gcc Ada front-end</a>
-</div>
+<p>Fortran support generally works, but there are still several unresolved bugs
+   in <a href="http://llvm.org/bugs/">Bugzilla</a>.  Please see the
+   tools/gfortran component for details.  Note that llvm-gcc is missing major
+   Fortran performance work in the frontend and library that went into GCC after
+   4.2.  If you are interested in Fortran, we recommend that you consider using
+   <a href="#dragonegg">dragonegg</a> instead.</p>
 
-<div class="doc_text">
-The llvm-gcc 4.2 Ada compiler works fairly well; however, this is not a mature
-technology, and problems should be expected.
-<ul>
-<li>The Ada front-end currently only builds on X86-32.  This is mainly due
-to lack of trampoline support (pointers to nested functions) on other platforms.
-However, it <a href="http://llvm.org/PR2006">also fails to build on X86-64</a>
-which does support trampolines.</li>
-<li>The Ada front-end <a href="http://llvm.org/PR2007">fails to bootstrap</a>.
-This is due to lack of LLVM support for <tt>setjmp</tt>/<tt>longjmp</tt> style
-exception handling, which is used internally by the compiler.
-Workaround: configure with <tt>--disable-bootstrap</tt>.</li>
-<li>The c380004, <a href="http://llvm.org/PR2010">c393010</a>
-and <a href="http://llvm.org/PR2421">cxg2021</a> ACATS tests fail
-(c380004 also fails with gcc-4.2 mainline).
-If the compiler is built with checks disabled then <a href="http://llvm.org/PR2010">c393010</a>
-causes the compiler to go into an infinite loop, using up all system memory.</li>
-<li>Some GCC specific Ada tests continue to crash the compiler.</li>
-<li>The <tt>-E</tt> binder option (exception backtraces)
-<a href="http://llvm.org/PR1982">does not work</a> and will result in programs
-crashing if an exception is raised.  Workaround: do not use <tt>-E</tt>.</li>
-<li>Only discrete types <a href="http://llvm.org/PR1981">are allowed to start
-or finish at a non-byte offset</a> in a record.  Workaround: do not pack records
-or use representation clauses that result in a field of a non-discrete type
-starting or finishing in the middle of a byte.</li>
-<li>The <tt>lli</tt> interpreter <a href="http://llvm.org/PR2009">considers
-'main' as generated by the Ada binder to be invalid</a>.
-Workaround: hand edit the file to use pointers for <tt>argv</tt> and
-<tt>envp</tt> rather than integers.</li>
-<li>The <tt>-fstack-check</tt> option <a href="http://llvm.org/PR2008">is
-ignored</a>.</li>
-</ul>
+<p>The llvm-gcc 4.2 Ada compiler has basic functionality, but is no longer being
+actively maintained.  If you are interested in Ada, we recommend that you
+consider using <a href="#dragonegg">dragonegg</a> instead.</p>
 </div>
 
 <!-- *********************************************************************** -->

Modified: llvm/branches/wendling/eh/docs/SourceLevelDebugging.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/SourceLevelDebugging.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/SourceLevelDebugging.html (original)
+++ llvm/branches/wendling/eh/docs/SourceLevelDebugging.html Tue Oct 26 19:48:03 2010
@@ -460,15 +460,17 @@
 <div class="doc_code">
 <pre>
 !3 = metadata !{
-  i32,     ;; Tag = 13 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
-  metadata ;; Reference to context descriptor
+  i32,     ;; Tag = 11 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
+  metadata,;; Reference to context descriptor
+  i32,     ;; Line number
+  i32      ;; Column number
 }
 </pre>
 </div>
 
 <p>These descriptors provide debug information about nested blocks within a
-   subprogram.  The array of member descriptors is used to define local
-   variables and deeper nested blocks.</p>
+   subprogram. The line number and column numbers are used to dinstinguish
+   two lexical blocks at same depth. </p>
 
 </div>
 
@@ -539,9 +541,9 @@
   metadata, ;; Name (may be "" for anonymous types)
   metadata, ;; Reference to file where defined (may be NULL)
   i32,      ;; Line number where defined (may be 0)
-  i32,      ;; Size in bits
-  i32,      ;; Alignment in bits
-  i32,      ;; Offset in bits
+  i64,      ;; Size in bits
+  i64,      ;; Alignment in bits
+  i64,      ;; Offset in bits
   metadata  ;; Reference to type derived from
 }
 </pre>
@@ -789,11 +791,11 @@
 
 <div class="doc_text">
 <pre>
-  void %<a href="#format_common_declare">llvm.dbg.declare</a>({}*, metadata)
+  void %<a href="#format_common_declare">llvm.dbg.declare</a>(metadata, metadata)
 </pre>
 
 <p>This intrinsic provides information about a local element (ex. variable.) The
-   first argument is the alloca for the variable, cast to a <tt>{}*</tt>. The
+   first argument is metadata holding alloca for the variable.</tt>. The
    second argument is
    the <tt>%<a href="#format_variables">llvm.dbg.variable</a></tt> containing
    the description of the variable. </p>

Modified: llvm/branches/wendling/eh/docs/TableGenFundamentals.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/TableGenFundamentals.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/TableGenFundamentals.html (original)
+++ llvm/branches/wendling/eh/docs/TableGenFundamentals.html Tue Oct 26 19:48:03 2010
@@ -405,8 +405,6 @@
 the symbol table.  If the type of 'a' does not match <em>type</em>, TableGen
 aborts with an error. !cast<string> is a special case in that the argument must
 be an object defined by a 'def' construct.</dd>
-<dt><tt>!nameconcat<type>(a, b)</tt></dt>
-  <dd>Shorthand for !cast<type>(!strconcat(a, b))</dd>
 <dt><tt>!subst(a, b, c)</tt></dt>
   <dd>If 'a' and 'b' are of string type or are symbol references, substitute 
 'b' for 'a' in 'c.'  This operation is analogous to $(subst) in GNU make.</dd>

Modified: llvm/branches/wendling/eh/docs/TestingGuide.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/TestingGuide.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/TestingGuide.html (original)
+++ llvm/branches/wendling/eh/docs/TestingGuide.html Tue Oct 26 19:48:03 2010
@@ -16,22 +16,22 @@
   <li><a href="#requirements">Requirements</a></li>
   <li><a href="#org">LLVM testing infrastructure organization</a>
     <ul>
-      <li><a href="#dejagnu">DejaGNU tests</a></li>
+      <li><a href="#regressiontests">Regression tests</a></li>
       <li><a href="#testsuite">Test suite</a></li>
     </ul>
   </li>
   <li><a href="#quick">Quick start</a>
     <ul>
-      <li><a href="#quickdejagnu">DejaGNU tests</a></li>
+      <li><a href="#quickregressiontests">Regression tests</a></li>
       <li><a href="#quicktestsuite">Test suite</a></li>
    </ul>
   </li>
-  <li><a href="#dgstructure">DejaGNU structure</a>
+  <li><a href="#rtstructure">Regression test structure</a>
     <ul>
-      <li><a href="#dgcustom">Writing new DejaGNU tests</a></li>
+      <li><a href="#rtcustom">Writing new regression tests</a></li>
       <li><a href="#FileCheck">The FileCheck utility</a></li>
-      <li><a href="#dgvars">Variables and substitutions</a></li>
-      <li><a href="#dgfeatures">Other features</a></li>
+      <li><a href="#rtvars">Variables and substitutions</a></li>
+      <li><a href="#rtfeatures">Other features</a></li>
    </ul>
   </li>
   <li><a href="#testsuitestructure">Test suite structure</a></li>
@@ -40,15 +40,13 @@
       <li><a href="#testsuiteexternal">Configuring External Tests</a></li>
       <li><a href="#testsuitetests">Running different tests</a></li>
       <li><a href="#testsuiteoutput">Generating test output</a></li>
-      <li><a href="#testsuitecustom">Writing custom tests for llvm-test</a></li>
+      <li><a href="#testsuitecustom">Writing custom tests for test-suite</a></li>
    </ul>
   </li>
-  <li><a href="#nightly">Running the nightly tester</a></li>
 </ol>
 
 <div class="doc_author">
-  <p>Written by John T. Criswell, <a
-  href="http://llvm.x10sys.com/rspencer">Reid Spencer</a>, and Tanya Lattner</p>
+  <p>Written by John T. Criswell, Daniel Dunbar, Reid Spencer, and Tanya Lattner</p>
 </div>
 
 <!--=========================================================================-->
@@ -57,9 +55,9 @@
 
 <div class="doc_text">
 
-<p>This document is the reference manual for the LLVM testing infrastructure. It documents
-the structure of the LLVM testing infrastructure, the tools needed to use it,
-and how to add and run tests.</p>
+<p>This document is the reference manual for the LLVM testing infrastructure. It
+documents the structure of the LLVM testing infrastructure, the tools needed to
+use it, and how to add and run tests.</p>
 
 </div>
 
@@ -69,17 +67,9 @@
 
 <div class="doc_text">
 
-<p>In order to use the LLVM testing infrastructure, you will need all of the software
-required to build LLVM, plus the following:</p>
-
-<dl>
-<dt><a href="http://www.gnu.org/software/dejagnu/">DejaGNU</a></dt>
-<dd>The Feature and Regressions tests are organized and run by DejaGNU.</dd>
-<dt><a href="http://expect.nist.gov/">Expect</a></dt>
-<dd>Expect is required by DejaGNU.</dd>
-<dt><a href="http://www.tcl.tk/software/tcltk/">tcl</a></dt>
-<dd>Tcl is required by DejaGNU. </dd>
-</dl>
+<p>In order to use the LLVM testing infrastructure, you will need all of the
+software required to build LLVM, as well
+as <a href="http://python.org">Python</a> 2.4 or later.</p>
 
 </div>
 
@@ -89,29 +79,28 @@
 
 <div class="doc_text">
 
-<p>The LLVM testing infrastructure contains two major categories of tests: code
-fragments and whole programs. Code fragments are referred to as the "DejaGNU
-tests" and are in the <tt>llvm</tt> module in subversion under the
-<tt>llvm/test</tt> directory. The whole programs tests are referred to as the
-"Test suite" and are in the <tt>test-suite</tt> module in subversion.
+<p>The LLVM testing infrastructure contains two major categories of tests:
+regression tests and whole programs. The regression tests are contained inside
+the LLVM repository itself under <tt>llvm/test</tt> and are expected to always
+pass -- they should be run before every commit. The whole programs tests are
+referred to as the "LLVM test suite" and are in the <tt>test-suite</tt> module
+in subversion.
 </p>
 
 </div>
 
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="dejagnu">DejaGNU tests</a></div>
+<div class="doc_subsection"><a name="regressiontests">Regression tests</a></div>
 <!-- _______________________________________________________________________ -->
 
 <div class="doc_text">
 
-<p>Code fragments are small pieces of code that test a specific
-feature of LLVM or trigger a specific bug in LLVM.  They are usually
-written in LLVM assembly language, but can be written in other
-languages if the test targets a particular language front end (and the
-appropriate <tt>--with-llvmgcc</tt> options were used
-at <tt>configure</tt> time of the <tt>llvm</tt> module). These tests
-are driven by the DejaGNU testing framework, which is hidden behind a
-few simple makefiles.</p>
+<p>The regression tests are small pieces of code that test a specific feature of
+LLVM or trigger a specific bug in LLVM.  They are usually written in LLVM
+assembly language, but can be written in other languages if the test targets a
+particular language front end (and the appropriate <tt>--with-llvmgcc</tt>
+options were used at <tt>configure</tt> time of the <tt>llvm</tt> module). These
+tests are driven by the 'lit' testing tool, which is part of LLVM.</p>
 
 <p>These code fragments are not complete programs. The code generated
 from them is never executed to determine correct behavior.</p>
@@ -158,8 +147,8 @@
 
 <div class="doc_text">
 
-  <p>The tests are located in two separate Subversion modules. The
-  DejaGNU tests are in the main "llvm" module under the directory 
+  <p>The tests are located in two separate Subversion modules. The regressions
+  tests are in the main "llvm" module under the directory
   <tt>llvm/test</tt> (so you get these tests for free with the main llvm tree).
   The more comprehensive test suite that includes whole 
 programs in C and C++ is in the <tt>test-suite</tt> module. This module should
@@ -171,10 +160,10 @@
 Alternatively, you can configure the <tt>test-suite</tt> module manually.</p>
 
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="quickdejagnu">DejaGNU tests</a></div>
+<div class="doc_subsection"><a name="quickregressiontests">Regression tests</a></div>
 <!-- _______________________________________________________________________ -->
-<p>To run all of the simple tests in LLVM using DejaGNU, use the master Makefile
- in the <tt>llvm/test</tt> directory:</p>
+<p>To run all of the LLVM regression tests, use master Makefile in
+ the <tt>llvm/test</tt> directory:</p>
 
 <div class="doc_code">
 <pre>
@@ -190,38 +179,47 @@
 </pre>
 </div>
 
-<p>To run only a subdirectory of tests in <tt>llvm/test</tt> using DejaGNU (ie.
-Transforms), just set the TESTSUITE variable to the path of the
-subdirectory (relative to <tt>llvm/test</tt>):</p>
+<p>If you have <a href="http://clang.llvm.org">Clang</a> checked out and built,
+you can run the LLVM and Clang tests simultaneously using:</p>
+
+<p>or</p>
 
 <div class="doc_code">
 <pre>
-% gmake TESTSUITE=Transforms check
+% gmake check-all
 </pre>
 </div>
 
-<p><b>Note: If you are running the tests with <tt>objdir != subdir</tt>, you
-must have run the complete testsuite before you can specify a
-subdirectory.</b></p>
+<p>To run the tests with Valgrind (Memcheck by default), just append
+<tt>VG=1</tt> to the commands above, e.g.:</p>
+
+<div class="doc_code">
+<pre>
+% gmake check VG=1
+</pre>
+</div>
 
-<p>To run only a single test, set <tt>TESTONE</tt> to its path (relative to
-<tt>llvm/test</tt>) and make the <tt>check-one</tt> target:</p>
+<p>To run individual tests or subsets of tests, you can use the 'llvm-lit'
+script which is built as part of LLVM. For example, to run the
+'Integer/BitCast.ll' test by itself you can run:</p>
 
 <div class="doc_code">
 <pre>
-% gmake TESTONE=Feature/basictest.ll check-one
+% llvm-lit ~/llvm/test/Integer/BitCast.ll 
 </pre>
 </div>
 
-<p>To run the tests with Valgrind (Memcheck by default), just append
-<tt>VG=1</tt> to the commands above, e.g.:</p>
+<p>or to run all of the ARM CodeGen tests:</p>
 
 <div class="doc_code">
 <pre>
-% gmake check VG=1
+% llvm-lit ~/llvm/test/CodeGen/ARM
 </pre>
 </div>
 
+<p>For more information on using the 'lit' tool, see 'llvm-lit --help' or the
+'lit' man page.</p>
+
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsection"><a name="quicktestsuite">Test suite</a></div>
 <!-- _______________________________________________________________________ -->
@@ -275,11 +273,11 @@
 </div>
 
 <!--=========================================================================-->
-<div class="doc_section"><a name="dgstructure">DejaGNU structure</a></div>
+<div class="doc_section"><a name="rtstructure">Regression test structure</a></div>
 <!--=========================================================================-->
 <div class="doc_text">
-  <p>The LLVM DejaGNU tests are driven by DejaGNU together with GNU Make and are
-  located in the <tt>llvm/test</tt> directory.
+  <p>The LLVM regression tests are driven by 'lit' and are located in
+  the <tt>llvm/test</tt> directory.
 
   <p>This directory contains a large array of small tests
   that exercise various features of LLVM and to ensure that regressions do not
@@ -302,23 +300,24 @@
 </div>
 
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="dgcustom">Writing new DejaGNU tests</a></div>
+<div class="doc_subsection"><a name="rtcustom">Writing new regression tests</a></div>
 <!-- _______________________________________________________________________ -->
 <div class="doc_text">
-  <p>The DejaGNU structure is very simple, but does require some information to 
-  be set. This information is gathered via <tt>configure</tt> and is written 
-  to a file, <tt>site.exp</tt> in <tt>llvm/test</tt>. The <tt>llvm/test</tt> 
-  Makefile does this work for you.</p>
-
-  <p>In order for DejaGNU to work, each directory of tests must have a 
-  <tt>dg.exp</tt> file. DejaGNU looks for this file to determine how to run the
-  tests. This file is just a Tcl script and it can do anything you want, but 
-  we've standardized it for the LLVM regression tests. If you're adding a
+  <p>The regression test structure is very simple, but does require some
+  information to be set. This information is gathered via <tt>configure</tt> and
+  is written to a file, <tt>lit.site.cfg</tt>
+  in <tt>llvm/test</tt>. The <tt>llvm/test</tt> Makefile does this work for
+  you.</p>
+
+  <p>In order for the regression tests to work, each directory of tests must
+  have a <tt>dg.exp</tt> file. Lit looks for this file to determine how to
+  run the tests. This file is just a Tcl script and it can do anything you want,
+  but we've standardized it for the LLVM regression tests. If you're adding a
   directory of tests, just copy <tt>dg.exp</tt> from another directory to get
-  running. The standard <tt>dg.exp</tt> simply loads a Tcl 
-  library (<tt>test/lib/llvm.exp</tt>) and calls the <tt>llvm_runtests</tt> 
-  function defined in that library with a list of file names to run. The names 
-  are obtained by using Tcl's glob command.  Any directory that contains only
+  running. The standard <tt>dg.exp</tt> simply loads a Tcl library
+  (<tt>test/lib/llvm.exp</tt>) and calls the <tt>llvm_runtests</tt> function
+  defined in that library with a list of file names to run. The names are
+  obtained by using Tcl's glob command.  Any directory that contains only
   directories does not need the <tt>dg.exp</tt> file.</p>
 
   <p>The <tt>llvm-runtests</tt> function lookas at each file that is passed to
@@ -379,7 +378,8 @@
 
   <p>There are some quoting rules that you must pay attention to when writing
   your RUN lines. In general nothing needs to be quoted. Tcl won't strip off any
-  ' or " so they will get passed to the invoked program. For example:</p>
+  quote characters so they will get passed to the invoked program. For
+  example:</p>
 
 <div class="doc_code">
 <pre>
@@ -696,7 +696,7 @@
 </div>
 
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="dgvars">Variables and
+<div class="doc_subsection"><a name="rtvars">Variables and
 substitutions</a></div>
 <!-- _______________________________________________________________________ -->
 <div class="doc_text">
@@ -792,7 +792,7 @@
 </div>
   
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="dgfeatures">Other Features</a></div>
+<div class="doc_subsection"><a name="rtfeatures">Other Features</a></div>
 <!-- _______________________________________________________________________ -->
 <div class="doc_text">
   <p>To make RUN line writing easier, there are several shell scripts located
@@ -818,7 +818,7 @@
   <p>Sometimes it is necessary to mark a test case as "expected fail" or XFAIL.
   You can easily mark a test as XFAIL just by including <tt>XFAIL: </tt> on a
   line near the top of the file. This signals that the test case should succeed
-  if the test fails. Such test cases are counted separately by DejaGnu. To
+  if the test fails. Such test cases are counted separately by the testing tool. To
   specify an expected fail, use the XFAIL keyword in the comments of the test
   program followed by a colon and one or more regular expressions (separated by
   a comma). The regular expressions allow you to XFAIL the test conditionally by
@@ -870,34 +870,34 @@
 test using the <tt>TEST</tt> variable to change what tests or run on the
 selected programs (see below for more info).</p>
 
-<p>In addition for testing correctness, the <tt>llvm-test</tt> directory also
+<p>In addition for testing correctness, the <tt>test-suite</tt> directory also
 performs timing tests of various LLVM optimizations.  It also records
 compilation times for the compilers and the JIT.  This information can be
 used to compare the effectiveness of LLVM's optimizations and code
 generation.</p>
 
-<p><tt>llvm-test</tt> tests are divided into three types of tests: MultiSource,
+<p><tt>test-suite</tt> tests are divided into three types of tests: MultiSource,
 SingleSource, and External.</p> 
 
 <ul>
-<li><tt>llvm-test/SingleSource</tt>
+<li><tt>test-suite/SingleSource</tt>
 <p>The SingleSource directory contains test programs that are only a single 
 source file in size.  These are usually small benchmark programs or small 
 programs that calculate a particular value.  Several such programs are grouped 
 together in each directory.</p></li>
 
-<li><tt>llvm-test/MultiSource</tt>
+<li><tt>test-suite/MultiSource</tt>
 <p>The MultiSource directory contains subdirectories which contain entire 
 programs with multiple source files.  Large benchmarks and whole applications 
 go here.</p></li>
 
-<li><tt>llvm-test/External</tt>
+<li><tt>test-suite/External</tt>
 <p>The External directory contains Makefiles for building code that is external
 to (i.e., not distributed with) LLVM.  The most prominent members of this
 directory are the SPEC 95 and SPEC 2000 benchmark suites. The <tt>External</tt>
 directory does not contain these actual tests, but only the Makefiles that know
 how to properly compile these programs from somewhere else. The presence and
-location of these external programs is configured by the llvm-test
+location of these external programs is configured by the test-suite
 <tt>configure</tt> script.</p></li>
 </ul>
 
@@ -906,9 +906,10 @@
 organizations should be relatively self explanatory.</p>
 
 <p>Some tests are known to fail.  Some are bugs that we have not fixed yet;
-others are features that we haven't added yet (or may never add).  In DejaGNU,
-the result for such tests will be XFAIL (eXpected FAILure).  In this way, you
-can tell the difference between an expected and unexpected failure.</p>
+others are features that we haven't added yet (or may never add).  In the
+regression tests, the result for such tests will be XFAIL (eXpected FAILure).
+In this way, you can tell the difference between an expected and unexpected
+failure.</p>
 
 <p>The tests in the test suite have no such feature at this time. If the
 test passes, only warnings and other miscellaneous output will be generated.  If
@@ -1083,9 +1084,9 @@
 will tally counts of things you care about.</p>
 
 <p>Following this, you can set up a test and a report that collects these and
-formats them for easy viewing.  This consists of two files, an
+formats them for easy viewing.  This consists of two files, a
 "<tt>test-suite/TEST.XXX.Makefile</tt>" fragment (where XXX is the name of your
-test) and an "<tt>llvm-test/TEST.XXX.report</tt>" file that indicates how to
+test) and a "<tt>test-suite/TEST.XXX.report</tt>" file that indicates how to
 format the output into a table.  There are many example reports of various
 levels of sophistication included with the test suite, and the framework is very
 general.</p>
@@ -1135,66 +1136,6 @@
 
 </div>
 
-<!--=========================================================================-->
-<div class="doc_section"><a name="nightly">Running the nightly tester</a></div>
-<!--=========================================================================-->
-
-<div class="doc_text">
-
-<p>
-The <a href="http://llvm.org/nightlytest/">LLVM Nightly Testers</a>
-automatically check out an LLVM tree, build it, run the "nightly" 
-program test (described above), run all of the DejaGNU tests, 
-delete the checked out tree, and then submit the results to 
-<a href="http://llvm.org/nightlytest/">http://llvm.org/nightlytest/</a>. 
-After test results are submitted to 
-<a href="http://llvm.org/nightlytest/">http://llvm.org/nightlytest/</a>,
-they are processed and displayed on the tests page. An email to 
-<a href="http://lists.cs.uiuc.edu/pipermail/llvm-testresults/">
-llvm-testresults at cs.uiuc.edu</a> summarizing the results is also generated. 
-This testing scheme is designed to ensure that programs don't break as well 
-as keep track of LLVM's progress over time.</p>
-
-<p>If you'd like to set up an instance of the nightly tester to run on your 
-machine, take a look at the comments at the top of the 
-<tt>utils/NewNightlyTest.pl</tt> file. If you decide to set up a nightly tester 
-please choose a unique nickname and invoke <tt>utils/NewNightlyTest.pl</tt> 
-with the "-nickname [yournickname]" command line option. 
-
-<p>You can create a shell script to encapsulate the running of the script.
-The optimized x86 Linux nightly test is run from just such a script:</p>
-
-<div class="doc_code">
-<pre>
-#!/bin/bash
-BASE=/proj/work/llvm/nightlytest
-export BUILDDIR=$BASE/build 
-export WEBDIR=$BASE/testresults 
-export LLVMGCCDIR=/proj/work/llvm/cfrontend/install
-export PATH=/proj/install/bin:$LLVMGCCDIR/bin:$PATH
-export LD_LIBRARY_PATH=/proj/install/lib
-cd $BASE
-cp /proj/work/llvm/llvm/utils/NewNightlyTest.pl .
-nice ./NewNightlyTest.pl -nice -release -verbose -parallel -enable-linscan \
-   -nickname NightlyTester -noexternals > output.log 2>&1 
-</pre>
-</div>
-
-<p>It is also possible to specify the the location your nightly test results
-are submitted. You can do this by passing the command line option
-"-submit-server [server_address]" and "-submit-script [script_on_server]" to
-<tt>utils/NewNightlyTest.pl</tt>. For example, to submit to the llvm.org 
-nightly test results page, you would invoke the nightly test script with 
-"-submit-server llvm.org -submit-script /nightlytest/NightlyTestAccept.cgi". 
-If these options are not specified, the nightly test script sends the results 
-to the llvm.org nightly test results page.</p>
-
-<p>Take a look at the <tt>NewNightlyTest.pl</tt> file to see what all of the
-flags and strings do.  If you start running the nightly tests, please let us
-know. Thanks!</p>
-
-</div>
-
 <!-- *********************************************************************** -->
 
 <hr>
@@ -1204,7 +1145,7 @@
   <a href="http://validator.w3.org/check/referer"><img
   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
 
-  John T. Criswell, Reid Spencer, and Tanya Lattner<br>
+  John T. Criswell, Daniel Dunbar, Reid Spencer, and Tanya Lattner<br>
   <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
   Last modified: $Date$
 </address>

Modified: llvm/branches/wendling/eh/docs/UsingLibraries.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/UsingLibraries.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/UsingLibraries.html (original)
+++ llvm/branches/wendling/eh/docs/UsingLibraries.html Tue Oct 26 19:48:03 2010
@@ -23,7 +23,11 @@
   <p>Written by <a href="mailto:rspencer at x10sys.com">Reid Spencer</a></p>
 </div>
 
-<p class="doc_warning">Warning: This document is out of date, please see <a href="CommandGuide/html/llvm-config.html">llvm-config</a> for more information.</p>
+<p class="doc_warning">Warning: This document is out of date, for more
+  information please
+  see <a href="CommandGuide/html/llvm-config.html">llvm-config</a> or,
+  if you use CMake, <a href=CMake.html#embedding>the CMake LLVM
+  guide</a>.</p>
 
 <!-- ======================================================================= -->
 <div class="doc_section"><a name="abstract">Abstract</a></div>

Modified: llvm/branches/wendling/eh/docs/WritingAnLLVMPass.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/WritingAnLLVMPass.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/WritingAnLLVMPass.html (original)
+++ llvm/branches/wendling/eh/docs/WritingAnLLVMPass.html Tue Oct 26 19:48:03 2010
@@ -51,6 +51,14 @@
         <li><a href="#doFinalization_loop">The <tt>doFinalization()
                                             </tt> method</a></li>
         </ul></li>
+     <li><a href="#RegionPass">The <tt>RegionPass</tt> class</a>
+        <ul>
+        <li><a href="#doInitialization_region">The <tt>doInitialization(Region *,
+                                            RGPassManager &)</tt> method</a></li>
+        <li><a href="#runOnRegion">The <tt>runOnRegion</tt> method</a></li>
+        <li><a href="#doFinalization_region">The <tt>doFinalization()
+                                            </tt> method</a></li>
+        </ul></li>
      <li><a href="#BasicBlockPass">The <tt>BasicBlockPass</tt> class</a>
         <ul>
         <li><a href="#doInitialization_fn">The <tt>doInitialization(Function
@@ -134,6 +142,7 @@
 href="#CallGraphSCCPass">CallGraphSCCPass</a></tt>, <tt><a
 href="#FunctionPass">FunctionPass</a></tt>, or <tt><a
 href="#LoopPass">LoopPass</a></tt>, or <tt><a
+href="#RegionPass">RegionPass</a></tt>, or <tt><a
 href="#BasicBlockPass">BasicBlockPass</a></tt> classes, which gives the system
 more information about what your pass does, and how it can be combined with
 other passes.  One of the main features of the LLVM Pass Framework is that it
@@ -805,6 +814,84 @@
 
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="RegionPass">The <tt>RegionPass</tt> class </a>
+</div>
+
+<div class="doc_text">
+
+<p> <tt>RegionPass</tt> is similar to <a href="#LoopPass"><tt>LoopPass</tt></a>,
+but executes on each single entry single exit region in the function.
+<tt>RegionPass</tt> processes regions in nested order such that the outer most
+region is processed last.  </p>
+
+<p> <tt>RegionPass</tt> subclasses are allowed to update the region tree by using
+the <tt>RGPassManager</tt> interface. You may overload three virtual methods of
+<tt>RegionPass</tt> to implementing your own region pass is usually. All these
+methods should return true if they modified the program, or false if they didn not.
+</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="doInitialization_region">The <tt>doInitialization(Region *,
+                                                 RGPassManager &)</tt>
+  method</a>
+</div>
+
+<div class="doc_text">
+
+<div class="doc_code"><pre>
+  <b>virtual bool</b> doInitialization(Region *, RGPassManager &RGM);
+</pre></div>
+
+<p>The <tt>doInitialization</tt> method is designed to do simple initialization
+type of stuff that does not depend on the functions being processed.  The
+<tt>doInitialization</tt> method call is not scheduled to overlap with any
+other pass executions (thus it should be very fast). RPPassManager
+interface should be used to access Function or Module level analysis
+information.</p>
+
+</div>
+
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="runOnRegion">The <tt>runOnRegion</tt> method</a>
+</div>
+
+<div class="doc_text">
+
+<div class="doc_code"><pre>
+  <b>virtual bool</b> runOnRegion(Region *, RGPassManager &RGM) = 0;
+</pre></div><p>
+
+<p>The <tt>runOnRegion</tt> method must be implemented by your subclass to do
+the transformation or analysis work of your pass.  As usual, a true value should
+be returned if the region is modified. <tt>RGPassManager</tt> interface
+should be used to update region tree.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="doFinalization_region">The <tt>doFinalization()</tt> method</a>
+</div>
+
+<div class="doc_text">
+
+<div class="doc_code"><pre>
+  <b>virtual bool</b> doFinalization();
+</pre></div>
+
+<p>The <tt>doFinalization</tt> method is an infrequently used method that is
+called when the pass framework has finished calling <a
+href="#runOnRegion"><tt>runOnRegion</tt></a> for every region in the
+program being compiled. </p>
+
+</div>
+
 
 
 <!-- ======================================================================= -->

Modified: llvm/branches/wendling/eh/docs/tutorial/LangImpl3.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/tutorial/LangImpl3.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/tutorial/LangImpl3.html (original)
+++ llvm/branches/wendling/eh/docs/tutorial/LangImpl3.html Tue Oct 26 19:48:03 2010
@@ -222,7 +222,7 @@
 
 <p>In the example above, the LLVM builder class is starting to show its value.  
 IRBuilder knows where to insert the newly created instruction, all you have to
-do is specify what instruction to create (e.g. with <tt>CreateAdd</tt>), which
+do is specify what instruction to create (e.g. with <tt>CreateFAdd</tt>), which
 operands to use (<tt>L</tt> and <tt>R</tt> here) and optionally provide a name
 for the generated instruction.</p>
 
@@ -1054,9 +1054,9 @@
   if (L == 0 || R == 0) return 0;
   
   switch (Op) {
-  case '+': return Builder.CreateAdd(L, R, "addtmp");
-  case '-': return Builder.CreateSub(L, R, "subtmp");
-  case '*': return Builder.CreateMul(L, R, "multmp");
+  case '+': return Builder.CreateFAdd(L, R, "addtmp");
+  case '-': return Builder.CreateFSub(L, R, "subtmp");
+  case '*': return Builder.CreateFMul(L, R, "multmp");
   case '<':
     L = Builder.CreateFCmpULT(L, R, "cmptmp");
     // Convert bool 0/1 to double 0.0 or 1.0

Modified: llvm/branches/wendling/eh/docs/tutorial/LangImpl5.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/tutorial/LangImpl5.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/tutorial/LangImpl5.html (original)
+++ llvm/branches/wendling/eh/docs/tutorial/LangImpl5.html Tue Oct 26 19:48:03 2010
@@ -800,7 +800,7 @@
     StepVal = ConstantFP::get(getGlobalContext(), APFloat(1.0));
   }
   
-  Value *NextVar = Builder.CreateAdd(Variable, StepVal, "nextvar");
+  Value *NextVar = Builder.CreateFAdd(Variable, StepVal, "nextvar");
 </pre>
 </div>
 
@@ -1517,7 +1517,7 @@
     StepVal = ConstantFP::get(getGlobalContext(), APFloat(1.0));
   }
   
-  Value *NextVar = Builder.CreateAdd(Variable, StepVal, "nextvar");
+  Value *NextVar = Builder.CreateFAdd(Variable, StepVal, "nextvar");
 
   // Compute the end condition.
   Value *EndCond = End->Codegen();

Modified: llvm/branches/wendling/eh/docs/tutorial/LangImpl6.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/tutorial/LangImpl6.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/tutorial/LangImpl6.html (original)
+++ llvm/branches/wendling/eh/docs/tutorial/LangImpl6.html Tue Oct 26 19:48:03 2010
@@ -1540,7 +1540,7 @@
     StepVal = ConstantFP::get(getGlobalContext(), APFloat(1.0));
   }
   
-  Value *NextVar = Builder.CreateAdd(Variable, StepVal, "nextvar");
+  Value *NextVar = Builder.CreateFAdd(Variable, StepVal, "nextvar");
 
   // Compute the end condition.
   Value *EndCond = End->Codegen();

Modified: llvm/branches/wendling/eh/docs/tutorial/LangImpl7.html
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/docs/tutorial/LangImpl7.html?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/docs/tutorial/LangImpl7.html (original)
+++ llvm/branches/wendling/eh/docs/tutorial/LangImpl7.html Tue Oct 26 19:48:03 2010
@@ -480,7 +480,7 @@
   <b>// Reload, increment, and restore the alloca.  This handles the case where
   // the body of the loop mutates the variable.
   Value *CurVar = Builder.CreateLoad(Alloca);
-  Value *NextVar = Builder.CreateAdd(CurVar, StepVal, "nextvar");
+  Value *NextVar = Builder.CreateFAdd(CurVar, StepVal, "nextvar");
   Builder.CreateStore(NextVar, Alloca);</b>
   ...
 </pre>
@@ -1833,7 +1833,7 @@
   // Reload, increment, and restore the alloca.  This handles the case where
   // the body of the loop mutates the variable.
   Value *CurVar = Builder.CreateLoad(Alloca, VarName.c_str());
-  Value *NextVar = Builder.CreateAdd(CurVar, StepVal, "nextvar");
+  Value *NextVar = Builder.CreateFAdd(CurVar, StepVal, "nextvar");
   Builder.CreateStore(NextVar, Alloca);
   
   // Convert condition to a bool by comparing equal to 0.0.

Modified: llvm/branches/wendling/eh/examples/BrainF/BrainF.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/examples/BrainF/BrainF.cpp?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/examples/BrainF/BrainF.cpp (original)
+++ llvm/branches/wendling/eh/examples/BrainF/BrainF.cpp Tue Oct 26 19:48:03 2010
@@ -54,10 +54,10 @@
 
   //Function prototypes
 
-  //declare void @llvm.memset.i32(i8 *, i8, i32, i32)
-  const Type *Tys[] = { Type::getInt32Ty(C) };
+  //declare void @llvm.memset.p0i8.i32(i8 *, i8, i32, i32, i1)
+  const Type *Tys[] = { Type::getInt8PtrTy(C), Type::getInt32Ty(C) };
   Function *memset_func = Intrinsic::getDeclaration(module, Intrinsic::memset,
-                                                    Tys, 1);
+                                                    Tys, 2);
 
   //declare i32 @getchar()
   getchar_func = cast<Function>(module->
@@ -88,13 +88,14 @@
                                    NULL, "arr");
   BB->getInstList().push_back(cast<Instruction>(ptr_arr));
 
-  //call void @llvm.memset.i32(i8 *%arr, i8 0, i32 %d, i32 1)
+  //call void @llvm.memset.p0i8.i32(i8 *%arr, i8 0, i32 %d, i32 1, i1 0)
   {
     Value *memset_params[] = {
       ptr_arr,
       ConstantInt::get(C, APInt(8, 0)),
       val_mem,
-      ConstantInt::get(C, APInt(32, 1))
+      ConstantInt::get(C, APInt(32, 1)),
+      ConstantInt::get(C, APInt(1, 0))
     };
 
     CallInst *memset_call = builder->

Modified: llvm/branches/wendling/eh/examples/ExceptionDemo/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/examples/ExceptionDemo/CMakeLists.txt?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/examples/ExceptionDemo/CMakeLists.txt (original)
+++ llvm/branches/wendling/eh/examples/ExceptionDemo/CMakeLists.txt Tue Oct 26 19:48:03 2010
@@ -1,4 +1,5 @@
 set(LLVM_LINK_COMPONENTS jit nativecodegen)
+set(LLVM_REQUIRES_EH 1)
 
 add_llvm_example(ExceptionDemo
   ExceptionDemo.cpp

Modified: llvm/branches/wendling/eh/examples/Fibonacci/fibonacci.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/examples/Fibonacci/fibonacci.cpp?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/examples/Fibonacci/fibonacci.cpp (original)
+++ llvm/branches/wendling/eh/examples/Fibonacci/fibonacci.cpp Tue Oct 26 19:48:03 2010
@@ -96,17 +96,22 @@
   LLVMContext Context;
   
   // Create some module to put our function into it.
-  Module *M = new Module("test", Context);
+  OwningPtr<Module> M(new Module("test", Context));
 
   // We are about to create the "fib" function:
-  Function *FibF = CreateFibFunction(M, Context);
+  Function *FibF = CreateFibFunction(M.get(), Context);
 
   // Now we going to create JIT
   std::string errStr;
-  ExecutionEngine *EE = EngineBuilder(M).setErrorStr(&errStr).setEngineKind(EngineKind::JIT).create();
+  ExecutionEngine *EE =
+    EngineBuilder(M.get())
+    .setErrorStr(&errStr)
+    .setEngineKind(EngineKind::JIT)
+    .create();
 
   if (!EE) {
-    errs() << argv[0] << ": Failed to construct ExecutionEngine: " << errStr << "\n";
+    errs() << argv[0] << ": Failed to construct ExecutionEngine: " << errStr
+           << "\n";
     return 1;
   }
 
@@ -127,5 +132,6 @@
 
   // import result of execution
   outs() << "Result: " << GV.IntVal << "\n";
+  
   return 0;
 }

Modified: llvm/branches/wendling/eh/examples/Kaleidoscope/Chapter7/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/examples/Kaleidoscope/Chapter7/CMakeLists.txt?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/examples/Kaleidoscope/Chapter7/CMakeLists.txt (original)
+++ llvm/branches/wendling/eh/examples/Kaleidoscope/Chapter7/CMakeLists.txt Tue Oct 26 19:48:03 2010
@@ -1,4 +1,5 @@
 set(LLVM_LINK_COMPONENTS core jit interpreter native)
+set(LLVM_REQUIRES_RTTI 1)
 
 add_llvm_example(Kaleidoscope-Ch7
   toy.cpp

Modified: llvm/branches/wendling/eh/examples/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/examples/Makefile?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/examples/Makefile (original)
+++ llvm/branches/wendling/eh/examples/Makefile Tue Oct 26 19:48:03 2010
@@ -1,10 +1,10 @@
 ##===- examples/Makefile -----------------------------------*- Makefile -*-===##
-# 
+#
 #                     The LLVM Compiler Infrastructure
 #
 # This file is distributed under the University of Illinois Open Source
 # License. See LICENSE.TXT for details.
-# 
+#
 ##===----------------------------------------------------------------------===##
 LEVEL=..
 
@@ -13,7 +13,7 @@
 PARALLEL_DIRS:= BrainF Fibonacci HowToUseJIT Kaleidoscope ModuleMaker
 
 ifeq ($(HAVE_PTHREAD),1)
-PARALLEL_DIRS += ParallelJIT 
+PARALLEL_DIRS += ParallelJIT
 endif
 
 ifeq ($(LLVM_ON_UNIX),1)

Modified: llvm/branches/wendling/eh/examples/ModuleMaker/README.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/examples/ModuleMaker/README.txt?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/examples/ModuleMaker/README.txt (original)
+++ llvm/branches/wendling/eh/examples/ModuleMaker/README.txt Tue Oct 26 19:48:03 2010
@@ -4,5 +4,5 @@
 
 This project is an extremely simple example of using some simple pieces of the 
 LLVM API.  The actual executable generated by this project simply emits an 
-LLVM bytecode file to standard output.  It is designed to show some basic 
+LLVM bitcode file to standard output.  It is designed to show some basic 
 usage of LLVM APIs, and how to link to LLVM libraries.

Modified: llvm/branches/wendling/eh/include/llvm-c/Core.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm-c/Core.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm-c/Core.h (original)
+++ llvm/branches/wendling/eh/include/llvm-c/Core.h Tue Oct 26 19:48:03 2010
@@ -40,6 +40,7 @@
 /* Need these includes to support the LLVM 'cast' template for the C++ 'wrap' 
    and 'unwrap' conversion functions. */
 #include "llvm/Module.h"
+#include "llvm/PassRegistry.h"
 #include "llvm/Support/IRBuilder.h"
 
 extern "C" {
@@ -92,6 +93,9 @@
 /** See the llvm::PassManagerBase class. */
 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
 
+/** See the llvm::PassRegistry class. */
+typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
+
 /** Used to get the users and usees of a Value. See the llvm::Use class. */
 typedef struct LLVMOpaqueUse *LLVMUseRef;
 
@@ -205,7 +209,7 @@
   LLVMOpaqueTypeKind,      /**< Opaque: type with unknown structure */
   LLVMVectorTypeKind,      /**< SIMD 'packed' format, or other vector type */
   LLVMMetadataTypeKind,    /**< Metadata */
-  LLVMUnionTypeKind        /**< Unions */
+  LLVMX86_MMXTypeKind      /**< X86 MMX */
 } LLVMTypeKind;
 
 typedef enum {
@@ -227,7 +231,9 @@
   LLVMGhostLinkage,       /**< Obsolete */
   LLVMCommonLinkage,      /**< Tentative definitions */
   LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
-  LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
+  LLVMLinkerPrivateWeakLinkage, /**< Like LinkerPrivate, but is weak. */
+  LLVMLinkerPrivateWeakDefAutoLinkage /**< Like LinkerPrivateWeak, but possibly
+                                           hidden. */
 } LLVMLinkage;
 
 typedef enum {
@@ -393,13 +399,6 @@
 void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
 LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
 
-/* Operations on union types */
-LLVMTypeRef LLVMUnionTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
-                                   unsigned ElementCount);
-LLVMTypeRef LLVMUnionType(LLVMTypeRef *ElementTypes, unsigned ElementCount);
-unsigned LLVMCountUnionElementTypes(LLVMTypeRef UnionTy);
-void LLVMGetUnionElementTypes(LLVMTypeRef UnionTy, LLVMTypeRef *Dest);
-
 /* Operations on array, pointer, and vector types (sequence types) */
 LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
 LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
@@ -414,10 +413,12 @@
 LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
 LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
 LLVMTypeRef LLVMOpaqueTypeInContext(LLVMContextRef C);
+LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
 
 LLVMTypeRef LLVMVoidType(void);
 LLVMTypeRef LLVMLabelType(void);
 LLVMTypeRef LLVMOpaqueType(void);
+LLVMTypeRef LLVMX86MMXType(void);
 
 /* Operations on type handles */
 LLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy);
@@ -523,6 +524,8 @@
 
 /* Operations on Users */
 LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
+void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
+int LLVMGetNumOperands(LLVMValueRef Val);
 
 /* Operations on constants of any type */
 LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
@@ -570,7 +573,6 @@
 LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
                              LLVMBool Packed);
 LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
-LLVMValueRef LLVMConstUnion(LLVMTypeRef Ty, LLVMValueRef Val);
 
 /* Constant expressions */
 LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
@@ -1020,6 +1022,11 @@
                                          char **OutMessage);
 void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
 
+/*===-- Pass Registry -----------------------------------------------------===*/
+
+/** Return the global pass registry, for use with initialization functions.
+    See llvm::PassRegistry::getPassRegistry. */
+LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
 
 /*===-- Pass Managers -----------------------------------------------------===*/
 
@@ -1108,6 +1115,7 @@
   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(LLVMContext,        LLVMContextRef       )
   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Use,                LLVMUseRef           )
   DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassManagerBase,    LLVMPassManagerRef   )
+  DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry,       LLVMPassRegistryRef  )
   /* LLVMModuleProviderRef exists for historical reasons, but now just holds a
    * Module.
    */

Modified: llvm/branches/wendling/eh/include/llvm-c/Target.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm-c/Target.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm-c/Target.h (original)
+++ llvm/branches/wendling/eh/include/llvm-c/Target.h Tue Oct 26 19:48:03 2010
@@ -1,26 +1,26 @@
-/*===-- llvm-c/Target.h - Target Lib C Iface --------------------*- C++ -*-===*\
-|*                                                                            *|
-|*                     The LLVM Compiler Infrastructure                       *|
-|*                                                                            *|
-|* This file is distributed under the University of Illinois Open Source      *|
-|* License. See LICENSE.TXT for details.                                      *|
-|*                                                                            *|
-|*===----------------------------------------------------------------------===*|
-|*                                                                            *|
-|* This header declares the C interface to libLLVMTarget.a, which             *|
-|* implements target information.                                             *|
-|*                                                                            *|
-|* Many exotic languages can interoperate with C code but have a harder time  *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages.                                           *|
-|*                                                                            *|
-\*===----------------------------------------------------------------------===*/
+/*===-- llvm-c/Target.h - Target Lib C Iface --------------------*- C++ -*-===*/
+/*                                                                            */
+/*                     The LLVM Compiler Infrastructure                       */
+/*                                                                            */
+/* This file is distributed under the University of Illinois Open Source      */
+/* License. See LICENSE.TXT for details.                                      */
+/*                                                                            */
+/*===----------------------------------------------------------------------===*/
+/*                                                                            */
+/* This header declares the C interface to libLLVMTarget.a, which             */
+/* implements target information.                                             */
+/*                                                                            */
+/* Many exotic languages can interoperate with C code but have a harder time  */
+/* with C++ due to name mangling. So in addition to C, this interface enables */
+/* tools written in such languages.                                           */
+/*                                                                            */
+/*===----------------------------------------------------------------------===*/
 
 #ifndef LLVM_C_TARGET_H
 #define LLVM_C_TARGET_H
 
 #include "llvm-c/Core.h"
-#include "llvm/Config/config.h"
+#include "llvm/Config/llvm-config.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -64,15 +64,10 @@
     for JIT applications to ensure that the target gets linked in correctly. */
 static inline LLVMBool LLVMInitializeNativeTarget(void) {
   /* If we have a native target, initialize it to ensure it is linked in. */
-#ifdef LLVM_NATIVE_ARCH
-#define DoInit2(TARG) \
-  LLVMInitialize ## TARG ## Info ();          \
-  LLVMInitialize ## TARG ()
-#define DoInit(T) DoInit2(T)
-  DoInit(LLVM_NATIVE_ARCH);
+#ifdef LLVM_NATIVE_TARGET
+  LLVM_NATIVE_TARGETINFO();
+  LLVM_NATIVE_TARGET();
   return 0;
-#undef DoInit
-#undef DoInit2
 #else
   return 1;
 #endif

Modified: llvm/branches/wendling/eh/include/llvm-c/Transforms/Scalar.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm-c/Transforms/Scalar.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm-c/Transforms/Scalar.h (original)
+++ llvm/branches/wendling/eh/include/llvm-c/Transforms/Scalar.h Tue Oct 26 19:48:03 2010
@@ -52,9 +52,6 @@
 /** See llvm::createLoopDeletionPass function. */
 void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM);
 
-/** See llvm::createLoopIndexSplitPass function. */
-void LLVMAddLoopIndexSplitPass(LLVMPassManagerRef PM);
-
 /** See llvm::createLoopRotatePass function. */
 void LLVMAddLoopRotatePass(LLVMPassManagerRef PM);
 

Modified: llvm/branches/wendling/eh/include/llvm-c/lto.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm-c/lto.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm-c/lto.h (original)
+++ llvm/branches/wendling/eh/include/llvm-c/lto.h Tue Oct 26 19:48:03 2010
@@ -18,26 +18,28 @@
 
 #include <stdbool.h>
 #include <stddef.h>
+#include "llvm/System/DataTypes.h"
 
-#define LTO_API_VERSION 3
+#define LTO_API_VERSION 4
 
 typedef enum {
-    LTO_SYMBOL_ALIGNMENT_MASK         = 0x0000001F,    /* log2 of alignment */
-    LTO_SYMBOL_PERMISSIONS_MASK       = 0x000000E0,    
-    LTO_SYMBOL_PERMISSIONS_CODE       = 0x000000A0,    
-    LTO_SYMBOL_PERMISSIONS_DATA       = 0x000000C0,    
-    LTO_SYMBOL_PERMISSIONS_RODATA     = 0x00000080,    
-    LTO_SYMBOL_DEFINITION_MASK        = 0x00000700,    
-    LTO_SYMBOL_DEFINITION_REGULAR     = 0x00000100,    
-    LTO_SYMBOL_DEFINITION_TENTATIVE   = 0x00000200,    
-    LTO_SYMBOL_DEFINITION_WEAK        = 0x00000300,    
-    LTO_SYMBOL_DEFINITION_UNDEFINED   = 0x00000400,    
-    LTO_SYMBOL_DEFINITION_WEAKUNDEF   = 0x00000500,
-    LTO_SYMBOL_SCOPE_MASK             = 0x00003800,    
-    LTO_SYMBOL_SCOPE_INTERNAL         = 0x00000800,    
-    LTO_SYMBOL_SCOPE_HIDDEN           = 0x00001000,    
-    LTO_SYMBOL_SCOPE_PROTECTED        = 0x00002000,    
-    LTO_SYMBOL_SCOPE_DEFAULT          = 0x00001800    
+    LTO_SYMBOL_ALIGNMENT_MASK              = 0x0000001F, /* log2 of alignment */
+    LTO_SYMBOL_PERMISSIONS_MASK            = 0x000000E0,    
+    LTO_SYMBOL_PERMISSIONS_CODE            = 0x000000A0,    
+    LTO_SYMBOL_PERMISSIONS_DATA            = 0x000000C0,    
+    LTO_SYMBOL_PERMISSIONS_RODATA          = 0x00000080,    
+    LTO_SYMBOL_DEFINITION_MASK             = 0x00000700,    
+    LTO_SYMBOL_DEFINITION_REGULAR          = 0x00000100,    
+    LTO_SYMBOL_DEFINITION_TENTATIVE        = 0x00000200,    
+    LTO_SYMBOL_DEFINITION_WEAK             = 0x00000300,    
+    LTO_SYMBOL_DEFINITION_UNDEFINED        = 0x00000400,    
+    LTO_SYMBOL_DEFINITION_WEAKUNDEF        = 0x00000500,
+    LTO_SYMBOL_SCOPE_MASK                  = 0x00003800,    
+    LTO_SYMBOL_SCOPE_INTERNAL              = 0x00000800,    
+    LTO_SYMBOL_SCOPE_HIDDEN                = 0x00001000,    
+    LTO_SYMBOL_SCOPE_PROTECTED             = 0x00002000,    
+    LTO_SYMBOL_SCOPE_DEFAULT               = 0x00001800,
+    LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800
 } lto_symbol_attributes;
 
 typedef enum {
@@ -135,11 +137,17 @@
 extern const char*
 lto_module_get_target_triple(lto_module_t mod);
 
+/**
+ * Sets triple string with which the object will be codegened.
+ */
+extern void
+lto_module_set_target_triple(lto_module_t mod, const char *triple);
+
 
 /**
  * Returns the number of symbols in the object module.
  */
-extern unsigned int
+extern uint32_t
 lto_module_get_num_symbols(lto_module_t mod);
 
 
@@ -147,14 +155,14 @@
  * Returns the name of the ith symbol in the object module.
  */
 extern const char*
-lto_module_get_symbol_name(lto_module_t mod, unsigned int index);
+lto_module_get_symbol_name(lto_module_t mod, uint32_t index);
 
 
 /**
  * Returns the attributes of the ith symbol in the object module.
  */
 extern lto_symbol_attributes
-lto_module_get_symbol_attribute(lto_module_t mod, unsigned int index);
+lto_module_get_symbol_attribute(lto_module_t mod, uint32_t index);
 
 
 /**
@@ -200,11 +208,10 @@
 
 
 /**
- * Sets the location of the "gcc" to run. If not set, libLTO will search for
- * "gcc" on the path.
+ * Sets the cpu to generate code for.
  */
 extern void
-lto_codegen_set_gcc_path(lto_code_gen_t cg, const char* path);
+lto_codegen_set_cpu(lto_code_gen_t cg, const char *cpu);
 
 
 /**
@@ -214,6 +221,12 @@
 extern void
 lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path);
 
+/**
+ * Sets extra arguments that libLTO should pass to the assembler.
+ */
+extern void
+lto_codegen_set_assembler_args(lto_code_gen_t cg, const char **args,
+                               int nargs);
 
 /**
  * Adds to a list of all global symbols that must exist in the final

Modified: llvm/branches/wendling/eh/include/llvm/ADT/APInt.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/APInt.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/APInt.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/APInt.h Tue Oct 26 19:48:03 2010
@@ -464,7 +464,7 @@
     // For small values, return quickly
     if (numBits <= APINT_BITS_PER_WORD)
       return APInt(numBits, ~0ULL << shiftAmt);
-    return (~APInt(numBits, 0)).shl(shiftAmt);
+    return getAllOnesValue(numBits).shl(shiftAmt);
   }
 
   /// Constructs an APInt value that has the bottom loBitsSet bits set.
@@ -481,7 +481,7 @@
     // For small values, return quickly.
     if (numBits < APINT_BITS_PER_WORD)
       return APInt(numBits, (1ULL << loBitsSet) - 1);
-    return (~APInt(numBits, 0)).lshr(numBits - loBitsSet);
+    return getAllOnesValue(numBits).lshr(numBits - loBitsSet);
   }
 
   /// The hash value is computed as the sum of the words and the bit width.
@@ -741,11 +741,11 @@
   /// RHS are treated as unsigned quantities for purposes of this division.
   /// @returns a new APInt value containing the division result
   /// @brief Unsigned division operation.
-  APInt udiv(const APInt& RHS) const;
+  APInt udiv(const APInt &RHS) const;
 
   /// Signed divide this APInt by APInt RHS.
   /// @brief Signed division function for APInt.
-  APInt sdiv(const APInt& RHS) const {
+  APInt sdiv(const APInt &RHS) const {
     if (isNegative())
       if (RHS.isNegative())
         return (-(*this)).udiv(-RHS);
@@ -763,11 +763,11 @@
   /// which is *this.
   /// @returns a new APInt value containing the remainder result
   /// @brief Unsigned remainder operation.
-  APInt urem(const APInt& RHS) const;
+  APInt urem(const APInt &RHS) const;
 
   /// Signed remainder operation on APInt.
   /// @brief Function for signed remainder operation.
-  APInt srem(const APInt& RHS) const {
+  APInt srem(const APInt &RHS) const {
     if (isNegative())
       if (RHS.isNegative())
         return -((-(*this)).urem(-RHS));
@@ -788,8 +788,7 @@
                       APInt &Quotient, APInt &Remainder);
 
   static void sdivrem(const APInt &LHS, const APInt &RHS,
-                      APInt &Quotient, APInt &Remainder)
-  {
+                      APInt &Quotient, APInt &Remainder) {
     if (LHS.isNegative()) {
       if (RHS.isNegative())
         APInt::udivrem(-LHS, -RHS, Quotient, Remainder);
@@ -804,6 +803,16 @@
       APInt::udivrem(LHS, RHS, Quotient, Remainder);
     }
   }
+  
+  
+  // Operations that return overflow indicators.
+  APInt sadd_ov(const APInt &RHS, bool &Overflow) const;
+  APInt uadd_ov(const APInt &RHS, bool &Overflow) const;
+  APInt ssub_ov(const APInt &RHS, bool &Overflow) const;
+  APInt usub_ov(const APInt &RHS, bool &Overflow) const;
+  APInt sdiv_ov(const APInt &RHS, bool &Overflow) const;
+  APInt smul_ov(const APInt &RHS, bool &Overflow) const;
+  APInt sshl_ov(unsigned Amt, bool &Overflow) const;
 
   /// @returns the bit value at bitPosition
   /// @brief Array-indexing support.
@@ -868,7 +877,7 @@
   /// the validity of the less-than relationship.
   /// @returns true if *this < RHS when both are considered unsigned.
   /// @brief Unsigned less than comparison
-  bool ult(const APInt& RHS) const;
+  bool ult(const APInt &RHS) const;
 
   /// Regards both *this as an unsigned quantity and compares it with RHS for
   /// the validity of the less-than relationship.
@@ -988,6 +997,9 @@
     return sge(APInt(getBitWidth(), RHS));
   }
 
+  
+  
+  
   /// This operation tests if there are any pairs of corresponding bits
   /// between this APInt and RHS that are both set.
   bool intersects(const APInt &RHS) const {
@@ -1029,7 +1041,7 @@
   /// @name Bit Manipulation Operators
   /// @{
   /// @brief Set every bit to 1.
-  APInt& set() {
+  APInt &set() {
     if (isSingleWord()) {
       VAL = -1ULL;
       return clearUnusedBits();
@@ -1044,10 +1056,10 @@
 
   /// Set the given bit to 1 whose position is given as "bitPosition".
   /// @brief Set a given bit to 1.
-  APInt& set(unsigned bitPosition);
+  APInt &set(unsigned bitPosition);
 
   /// @brief Set every bit to 0.
-  APInt& clear() {
+  APInt &clear() {
     if (isSingleWord())
       VAL = 0;
     else
@@ -1057,10 +1069,10 @@
 
   /// Set the given bit to 0 whose position is given as "bitPosition".
   /// @brief Set a given bit to 0.
-  APInt& clear(unsigned bitPosition);
+  APInt &clear(unsigned bitPosition);
 
   /// @brief Toggle every bit to its opposite value.
-  APInt& flip() {
+  APInt &flip() {
     if (isSingleWord()) {
       VAL ^= -1ULL;
       return clearUnusedBits();

Modified: llvm/branches/wendling/eh/include/llvm/ADT/BitVector.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/BitVector.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/BitVector.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/BitVector.h Tue Oct 26 19:48:03 2010
@@ -127,6 +127,12 @@
     return false;
   }
 
+  /// all - Returns true if all bits are set.
+  bool all() const {
+    // TODO: Optimize this.
+    return count() == size();
+  }
+
   /// none - Returns true if none of the bits are set.
   bool none() const {
     return !any();

Modified: llvm/branches/wendling/eh/include/llvm/ADT/DenseMap.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/DenseMap.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/DenseMap.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/DenseMap.h Tue Oct 26 19:48:03 2010
@@ -185,13 +185,12 @@
     ++NumTombstones;
     return true;
   }
-  bool erase(iterator I) {
+  void erase(iterator I) {
     BucketT *TheBucket = &*I;
     TheBucket->second.~ValueT();
     TheBucket->first = getTombstoneKey();
     --NumEntries;
     ++NumTombstones;
-    return true;
   }
 
   void swap(DenseMap& RHS) {

Modified: llvm/branches/wendling/eh/include/llvm/ADT/DenseSet.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/DenseSet.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/DenseSet.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/DenseSet.h Tue Oct 26 19:48:03 2010
@@ -106,8 +106,8 @@
   const_iterator end() const { return ConstIterator(TheMap.end()); }
 
   iterator find(const ValueT &V) { return Iterator(TheMap.find(V)); }
-  bool erase(Iterator I) { return TheMap.erase(I.I); }
-  bool erase(ConstIterator CI) { return TheMap.erase(CI.I); }
+  void erase(Iterator I) { return TheMap.erase(I.I); }
+  void erase(ConstIterator CI) { return TheMap.erase(CI.I); }
 
   std::pair<iterator, bool> insert(const ValueT &V) {
     return TheMap.insert(std::make_pair(V, 0));

Modified: llvm/branches/wendling/eh/include/llvm/ADT/DepthFirstIterator.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/DepthFirstIterator.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/DepthFirstIterator.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/DepthFirstIterator.h Tue Oct 26 19:48:03 2010
@@ -183,6 +183,16 @@
   inline bool nodeVisited(NodeType *Node) const {
     return this->Visited.count(Node) != 0;
   }
+
+  /// getPathLength - Return the length of the path from the entry node to the
+  /// current node, counting both nodes.
+  unsigned getPathLength() const { return VisitStack.size(); }
+
+  /// getPath - Return the n'th node in the path from the the entry node to the
+  /// current node.
+  NodeType *getPath(unsigned n) const {
+    return VisitStack[n].first.getPointer();
+  }
 };
 
 

Modified: llvm/branches/wendling/eh/include/llvm/ADT/FoldingSet.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/FoldingSet.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/FoldingSet.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/FoldingSet.h Tue Oct 26 19:48:03 2010
@@ -54,9 +54,9 @@
 ///      void Profile(FoldingSetNodeID &ID) const {
 ///        ID.AddString(Name);
 ///        ID.AddInteger(Value);
-///       }
-///       ...
-///     };
+///      }
+///      ...
+///    };
 ///
 /// To define the folding set itself use the FoldingSet template;
 ///
@@ -190,26 +190,76 @@
 
   /// GetNodeProfile - Instantiations of the FoldingSet template implement
   /// this function to gather data bits for the given node.
-  virtual void GetNodeProfile(FoldingSetNodeID &ID, Node *N) const = 0;
+  virtual void GetNodeProfile(Node *N, FoldingSetNodeID &ID) const = 0;
+  /// NodeEquals - Instantiations of the FoldingSet template implement
+  /// this function to compare the given node with the given ID.
+  virtual bool NodeEquals(Node *N, const FoldingSetNodeID &ID,
+                          FoldingSetNodeID &TempID) const=0;
+  /// NodeEquals - Instantiations of the FoldingSet template implement
+  /// this function to compute a hash value for the given node.
+  virtual unsigned ComputeNodeHash(Node *N,
+                                   FoldingSetNodeID &TempID) const = 0;
 };
 
 //===----------------------------------------------------------------------===//
+
+template<typename T> struct FoldingSetTrait;
+
+/// DefaultFoldingSetTrait - This class provides default implementations
+/// for FoldingSetTrait implementations.
+///
+template<typename T> struct DefaultFoldingSetTrait {
+  static void Profile(const T& X, FoldingSetNodeID& ID) {
+    X.Profile(ID);
+  }
+  static void Profile(T& X, FoldingSetNodeID& ID) {
+    X.Profile(ID);
+  }
+
+  // Equals - Test if the profile for X would match ID, using TempID
+  // to compute a temporary ID if necessary. The default implementation
+  // just calls Profile and does a regular comparison. Implementations
+  // can override this to provide more efficient implementations.
+  static inline bool Equals(T &X, const FoldingSetNodeID &ID,
+                            FoldingSetNodeID &TempID);
+
+  // ComputeHash - Compute a hash value for X, using TempID to
+  // compute a temporary ID if necessary. The default implementation
+  // just calls Profile and does a regular hash computation.
+  // Implementations can override this to provide more efficient
+  // implementations.
+  static inline unsigned ComputeHash(T &X, FoldingSetNodeID &TempID);
+};
+
 /// FoldingSetTrait - This trait class is used to define behavior of how
-///  to "profile" (in the FoldingSet parlance) an object of a given type.
-///  The default behavior is to invoke a 'Profile' method on an object, but
-///  through template specialization the behavior can be tailored for specific
-///  types.  Combined with the FoldingSetNodeWrapper classs, one can add objects
-///  to FoldingSets that were not originally designed to have that behavior.
-///
-template<typename T> struct FoldingSetTrait {
-  static inline void Profile(const T& X, FoldingSetNodeID& ID) { X.Profile(ID);}
-  static inline void Profile(T& X, FoldingSetNodeID& ID) { X.Profile(ID); }
-  template <typename Ctx>
-  static inline void Profile(T &X, FoldingSetNodeID &ID, Ctx Context) {
+/// to "profile" (in the FoldingSet parlance) an object of a given type.
+/// The default behavior is to invoke a 'Profile' method on an object, but
+/// through template specialization the behavior can be tailored for specific
+/// types.  Combined with the FoldingSetNodeWrapper class, one can add objects
+/// to FoldingSets that were not originally designed to have that behavior.
+template<typename T> struct FoldingSetTrait
+  : public DefaultFoldingSetTrait<T> {};
+
+template<typename T, typename Ctx> struct ContextualFoldingSetTrait;
+
+/// DefaultContextualFoldingSetTrait - Like DefaultFoldingSetTrait, but
+/// for ContextualFoldingSets.
+template<typename T, typename Ctx>
+struct DefaultContextualFoldingSetTrait {
+  static void Profile(T &X, FoldingSetNodeID &ID, Ctx Context) {
     X.Profile(ID, Context);
   }
+  static inline bool Equals(T &X, const FoldingSetNodeID &ID,
+                            FoldingSetNodeID &TempID, Ctx Context);
+  static inline unsigned ComputeHash(T &X, FoldingSetNodeID &TempID,
+                                     Ctx Context);
 };
 
+/// ContextualFoldingSetTrait - Like FoldingSetTrait, but for
+/// ContextualFoldingSets.
+template<typename T, typename Ctx> struct ContextualFoldingSetTrait
+  : public DefaultContextualFoldingSetTrait<T, Ctx> {};
+
 //===--------------------------------------------------------------------===//
 /// FoldingSetNodeIDRef - This class describes a reference to an interned
 /// FoldingSetNodeID, which can be a useful to store node id data rather
@@ -217,13 +267,19 @@
 /// is often much larger than necessary, and the possibility of heap
 /// allocation means it requires a non-trivial destructor call.
 class FoldingSetNodeIDRef {
-  unsigned* Data;
+  const unsigned* Data;
   size_t Size;
 public:
   FoldingSetNodeIDRef() : Data(0), Size(0) {}
-  FoldingSetNodeIDRef(unsigned *D, size_t S) : Data(D), Size(S) {}
+  FoldingSetNodeIDRef(const unsigned *D, size_t S) : Data(D), Size(S) {}
 
-  unsigned *getData() const { return Data; }
+  /// ComputeHash - Compute a strong hash value for this FoldingSetNodeIDRef,
+  /// used to lookup the node in the FoldingSetImpl.
+  unsigned ComputeHash() const;
+
+  bool operator==(FoldingSetNodeIDRef) const;
+
+  const unsigned *getData() const { return Data; }
   size_t getSize() const { return Size; }
 };
 
@@ -259,16 +315,17 @@
   inline void Add(const T& x) { FoldingSetTrait<T>::Profile(x, *this); }
 
   /// clear - Clear the accumulated profile, allowing this FoldingSetNodeID
-  ///  object to be used to compute a new profile.
+  /// object to be used to compute a new profile.
   inline void clear() { Bits.clear(); }
 
   /// ComputeHash - Compute a strong hash value for this FoldingSetNodeID, used
-  ///  to lookup the node in the FoldingSetImpl.
+  /// to lookup the node in the FoldingSetImpl.
   unsigned ComputeHash() const;
 
   /// operator== - Used to compare two nodes to each other.
   ///
   bool operator==(const FoldingSetNodeID &RHS) const;
+  bool operator==(const FoldingSetNodeIDRef RHS) const;
 
   /// Intern - Copy this node's data to a memory region allocated from the
   /// given allocator and return a FoldingSetNodeIDRef describing the
@@ -281,6 +338,39 @@
 template<class T> class FoldingSetIterator;
 template<class T> class FoldingSetBucketIterator;
 
+// Definitions of FoldingSetTrait and ContextualFoldingSetTrait functions, which
+// require the definition of FoldingSetNodeID.
+template<typename T>
+inline bool
+DefaultFoldingSetTrait<T>::Equals(T &X, const FoldingSetNodeID &ID,
+                                  FoldingSetNodeID &TempID) {
+  FoldingSetTrait<T>::Profile(X, TempID);
+  return TempID == ID;
+}
+template<typename T>
+inline unsigned
+DefaultFoldingSetTrait<T>::ComputeHash(T &X, FoldingSetNodeID &TempID) {
+  FoldingSetTrait<T>::Profile(X, TempID);
+  return TempID.ComputeHash();
+}
+template<typename T, typename Ctx>
+inline bool
+DefaultContextualFoldingSetTrait<T, Ctx>::Equals(T &X,
+                                                 const FoldingSetNodeID &ID,
+                                                 FoldingSetNodeID &TempID,
+                                                 Ctx Context) {
+  ContextualFoldingSetTrait<T, Ctx>::Profile(X, TempID, Context);
+  return TempID == ID;
+}
+template<typename T, typename Ctx>
+inline unsigned
+DefaultContextualFoldingSetTrait<T, Ctx>::ComputeHash(T &X,
+                                                      FoldingSetNodeID &TempID,
+                                                      Ctx Context) {
+  ContextualFoldingSetTrait<T, Ctx>::Profile(X, TempID, Context);
+  return TempID.ComputeHash();
+}
+
 //===----------------------------------------------------------------------===//
 /// FoldingSet - This template class is used to instantiate a specialized
 /// implementation of the folding set to the node class T.  T must be a
@@ -290,9 +380,23 @@
 private:
   /// GetNodeProfile - Each instantiatation of the FoldingSet needs to provide a
   /// way to convert nodes into a unique specifier.
-  virtual void GetNodeProfile(FoldingSetNodeID &ID, Node *N) const {
+  virtual void GetNodeProfile(Node *N, FoldingSetNodeID &ID) const {
     T *TN = static_cast<T *>(N);
-    FoldingSetTrait<T>::Profile(*TN,ID);
+    FoldingSetTrait<T>::Profile(*TN, ID);
+  }
+  /// NodeEquals - Instantiations may optionally provide a way to compare a
+  /// node with a specified ID.
+  virtual bool NodeEquals(Node *N, const FoldingSetNodeID &ID,
+                          FoldingSetNodeID &TempID) const {
+    T *TN = static_cast<T *>(N);
+    return FoldingSetTrait<T>::Equals(*TN, ID, TempID);
+  }
+  /// NodeEquals - Instantiations may optionally provide a way to compute a
+  /// hash value directly from a node.
+  virtual unsigned ComputeNodeHash(Node *N,
+                                   FoldingSetNodeID &TempID) const {
+    T *TN = static_cast<T *>(N);
+    return FoldingSetTrait<T>::ComputeHash(*TN, TempID);
   }
 
 public:
@@ -354,13 +458,21 @@
 
   /// GetNodeProfile - Each instantiatation of the FoldingSet needs to provide a
   /// way to convert nodes into a unique specifier.
-  virtual void GetNodeProfile(FoldingSetNodeID &ID,
-                              FoldingSetImpl::Node *N) const {
+  virtual void GetNodeProfile(FoldingSetImpl::Node *N,
+                              FoldingSetNodeID &ID) const {
     T *TN = static_cast<T *>(N);
-
-    // We must use explicit template arguments in case Ctx is a
-    // reference type.
-    FoldingSetTrait<T>::template Profile<Ctx>(*TN, ID, Context);
+    ContextualFoldingSetTrait<T, Ctx>::Profile(*TN, ID, Context);
+  }
+  virtual bool NodeEquals(FoldingSetImpl::Node *N,
+                          const FoldingSetNodeID &ID,
+                          FoldingSetNodeID &TempID) const {
+    T *TN = static_cast<T *>(N);
+    return ContextualFoldingSetTrait<T, Ctx>::Equals(*TN, ID, TempID, Context);
+  }
+  virtual unsigned ComputeNodeHash(FoldingSetImpl::Node *N,
+                                   FoldingSetNodeID &TempID) const {
+    T *TN = static_cast<T *>(N);
+    return ContextualFoldingSetTrait<T, Ctx>::ComputeHash(*TN, TempID, Context);
   }
 
 public:
@@ -447,8 +559,8 @@
 
 //===----------------------------------------------------------------------===//
 /// FoldingSetBucketIteratorImpl - This is the common bucket iterator support
-///  shared by all folding sets, which knows how to walk a particular bucket
-///  of a folding set hash table.
+/// shared by all folding sets, which knows how to walk a particular bucket
+/// of a folding set hash table.
 
 class FoldingSetBucketIteratorImpl {
 protected:
@@ -549,7 +661,7 @@
 protected:
   explicit FastFoldingSetNode(const FoldingSetNodeID &ID) : FastID(ID) {}
 public:
-  void Profile(FoldingSetNodeID& ID) { ID = FastID; }
+  void Profile(FoldingSetNodeID& ID) const { ID = FastID; }
 };
 
 //===----------------------------------------------------------------------===//
@@ -559,9 +671,6 @@
   static inline void Profile(const T* X, FoldingSetNodeID& ID) {
     ID.AddPointer(X);
   }
-  static inline void Profile(T* X, FoldingSetNodeID& ID) {
-    ID.AddPointer(X);
-  }
 };
 
 template<typename T> struct FoldingSetTrait<const T*> {

Modified: llvm/branches/wendling/eh/include/llvm/ADT/ImmutableIntervalMap.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/ImmutableIntervalMap.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/ImmutableIntervalMap.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/ImmutableIntervalMap.h Tue Oct 26 19:48:03 2010
@@ -16,14 +16,14 @@
 
 class Interval {
 private:
-  uint64_t Start;
-  uint64_t End;
+  int64_t Start;
+  int64_t End;
 
 public:
-  Interval(uint64_t S, uint64_t E) : Start(S), End(E) {}
+  Interval(int64_t S, int64_t E) : Start(S), End(E) {}
 
-  uint64_t getStart() const { return Start; }
-  uint64_t getEnd() const { return End; }
+  int64_t getStart() const { return Start; }
+  int64_t getEnd() const { return End; }
 };
 
 template <typename T>

Modified: llvm/branches/wendling/eh/include/llvm/ADT/STLExtras.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/STLExtras.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/STLExtras.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/STLExtras.h Tue Oct 26 19:48:03 2010
@@ -225,7 +225,7 @@
 
 /// Find the length of an array.
 template<class T, std::size_t N>
-inline size_t array_lengthof(T (&x)[N]) {
+inline size_t array_lengthof(T (&)[N]) {
   return N;
 }
 
@@ -243,7 +243,7 @@
 /// get_array_pad_sort_comparator - This is an internal helper function used to
 /// get type deduction of T right.
 template<typename T>
-static int (*get_array_pad_sort_comparator(const T &X))
+static int (*get_array_pad_sort_comparator(const T &))
              (const void*, const void*) {
   return array_pod_sort_comparator<T>;
 }

Modified: llvm/branches/wendling/eh/include/llvm/ADT/SetVector.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/SetVector.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/SetVector.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/SetVector.h Tue Oct 26 19:48:03 2010
@@ -114,13 +114,15 @@
   }
 
   /// @brief Remove an item from the set vector.
-  void remove(const value_type& X) {
+  bool remove(const value_type& X) {
     if (set_.erase(X)) {
       typename vector_type::iterator I =
         std::find(vector_.begin(), vector_.end(), X);
       assert(I != vector_.end() && "Corrupted SetVector instances!");
       vector_.erase(I);
+      return true;
     }
+    return false;
   }
 
 

Modified: llvm/branches/wendling/eh/include/llvm/ADT/SmallBitVector.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/SmallBitVector.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/SmallBitVector.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/SmallBitVector.h Tue Oct 26 19:48:03 2010
@@ -187,6 +187,13 @@
     return getPointer()->any();
   }
 
+  /// all - Returns true if all bits are set.
+  bool all() const {
+    if (isSmall())
+      return getSmallBits() == (uintptr_t(1) << getSmallSize()) - 1;
+    return getPointer()->all();
+  }
+
   /// none - Returns true if none of the bits are set.
   bool none() const {
     if (isSmall())

Modified: llvm/branches/wendling/eh/include/llvm/ADT/SmallVector.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/SmallVector.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/SmallVector.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/SmallVector.h Tue Oct 26 19:48:03 2010
@@ -57,19 +57,13 @@
   // Allocate raw space for N elements of type T.  If T has a ctor or dtor, we
   // don't want it to be automatically run, so we need to represent the space as
   // something else.  An array of char would work great, but might not be
-  // aligned sufficiently.  Instead, we either use GCC extensions, or some
-  // number of union instances for the space, which guarantee maximal alignment.
-  struct U {
-#ifdef __GNUC__
-    char X __attribute__((aligned(8)));
-#else
-    union {
-      double D;
-      long double LD;
-      long long L;
-      void *P;
-    } X;
-#endif
+  // aligned sufficiently.  Instead we use some number of union instances for
+  // the space, which guarantee maximal alignment.
+  union U {
+    double D;
+    long double LD;
+    long long L;
+    void *P;
   } FirstEl;
   // Space after 'FirstEl' is clobbered, do not add any instance vars after it.
 
@@ -206,7 +200,7 @@
 void SmallVectorTemplateBase<T, isPodLike>::grow(size_t MinSize) {
   size_t CurCapacity = this->capacity();
   size_t CurSize = this->size();
-  size_t NewCapacity = 2*CurCapacity;
+  size_t NewCapacity = 2*CurCapacity + 1; // Always grow, even from zero.
   if (NewCapacity < MinSize)
     NewCapacity = MinSize;
   T *NewElts = static_cast<T*>(malloc(NewCapacity*sizeof(T)));
@@ -707,6 +701,36 @@
 
 };
 
+/// Specialize SmallVector at N=0.  This specialization guarantees
+/// that it can be instantiated at an incomplete T if none of its
+/// members are required.
+template <typename T>
+class SmallVector<T,0> : public SmallVectorImpl<T> {
+public:
+  SmallVector() : SmallVectorImpl<T>(0) {}
+
+  explicit SmallVector(unsigned Size, const T &Value = T())
+    : SmallVectorImpl<T>(0) {
+    this->reserve(Size);
+    while (Size--)
+      this->push_back(Value);
+  }
+
+  template<typename ItTy>
+  SmallVector(ItTy S, ItTy E) : SmallVectorImpl<T>(0) {
+    this->append(S, E);
+  }
+
+  SmallVector(const SmallVector &RHS) : SmallVectorImpl<T>(0) {
+    SmallVectorImpl<T>::operator=(RHS);
+  }
+
+  SmallVector &operator=(const SmallVectorImpl<T> &RHS) {
+    return SmallVectorImpl<T>::operator=(RHS);
+  }
+
+};
+
 } // End llvm namespace
 
 namespace std {

Modified: llvm/branches/wendling/eh/include/llvm/ADT/StringMap.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/StringMap.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/StringMap.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/StringMap.h Tue Oct 26 19:48:03 2010
@@ -137,8 +137,8 @@
   StringMapEntry(unsigned strLen, const ValueTy &V)
     : StringMapEntryBase(strLen), second(V) {}
 
-  StringRef getKey() const { 
-    return StringRef(getKeyData(), getKeyLength()); 
+  StringRef getKey() const {
+    return StringRef(getKeyData(), getKeyLength());
   }
 
   const ValueTy &getValue() const { return second; }
@@ -216,14 +216,14 @@
   static const StringMapEntry &GetStringMapEntryFromValue(const ValueTy &V) {
     return GetStringMapEntryFromValue(const_cast<ValueTy&>(V));
   }
-  
+
   /// GetStringMapEntryFromKeyData - Given key data that is known to be embedded
   /// into a StringMapEntry, return the StringMapEntry itself.
   static StringMapEntry &GetStringMapEntryFromKeyData(const char *KeyData) {
     char *Ptr = const_cast<char*>(KeyData) - sizeof(StringMapEntry<ValueTy>);
     return *reinterpret_cast<StringMapEntry*>(Ptr);
   }
-  
+
 
   /// Destroy - Destroy this StringMapEntry, releasing memory back to the
   /// specified allocator.
@@ -242,6 +242,9 @@
 };
 
 
+template <typename T> struct ReferenceAdder { typedef T& result; };
+template <typename T> struct ReferenceAdder<T&> { typedef T result; };
+
 /// StringMap - This is an unconventional map that is specialized for handling
 /// keys that are "strings", which are basically ranges of bytes. This does some
 /// funky memory allocation and hashing things to make it extremely efficient,
@@ -254,7 +257,7 @@
   StringMap() : StringMapImpl(static_cast<unsigned>(sizeof(MapEntryTy))) {}
   explicit StringMap(unsigned InitialSize)
     : StringMapImpl(InitialSize, static_cast<unsigned>(sizeof(MapEntryTy))) {}
-  
+
   explicit StringMap(AllocatorTy A)
     : StringMapImpl(static_cast<unsigned>(sizeof(MapEntryTy))), Allocator(A) {}
 
@@ -269,9 +272,10 @@
     clear();
   }
 
-
-  AllocatorTy &getAllocator() { return Allocator; }
-  const AllocatorTy &getAllocator() const { return Allocator; }
+  typedef typename ReferenceAdder<AllocatorTy>::result AllocatorRefTy;
+  typedef typename ReferenceAdder<const AllocatorTy>::result AllocatorCRefTy;
+  AllocatorRefTy getAllocator() { return Allocator; }
+  AllocatorCRefTy getAllocator() const { return Allocator; }
 
   typedef const char* key_type;
   typedef ValueTy mapped_type;

Modified: llvm/branches/wendling/eh/include/llvm/ADT/StringRef.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/StringRef.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/StringRef.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/StringRef.h Tue Oct 26 19:48:03 2010
@@ -142,14 +142,22 @@
     /// operation, rather than as two operations (an insertion and a
     /// removal).
     ///
+    /// \param MaxEditDistance If non-zero, the maximum edit distance that
+    /// this routine is allowed to compute. If the edit distance will exceed
+    /// that maximum, returns \c MaxEditDistance+1.
+    ///
     /// \returns the minimum number of character insertions, removals,
     /// or (if \p AllowReplacements is \c true) replacements needed to
     /// transform one of the given strings into the other. If zero,
     /// the strings are identical.
-    unsigned edit_distance(StringRef Other, bool AllowReplacements = true);
+    unsigned edit_distance(StringRef Other, bool AllowReplacements = true,
+                           unsigned MaxEditDistance = 0);
 
     /// str - Get the contents as an std::string.
-    std::string str() const { return std::string(Data, Length); }
+    std::string str() const {
+      if (Data == 0) return std::string();
+      return std::string(Data, Length);
+    }
 
     /// @}
     /// @name Operator Overloads
@@ -228,12 +236,14 @@
 
     /// find_first_of - Find the first character in the string that is \arg C,
     /// or npos if not found. Same as find.
-    size_type find_first_of(char C, size_t = 0) const { return find(C); }
+    size_type find_first_of(char C, size_t From = 0) const {
+      return find(C, From);
+    }
 
     /// find_first_of - Find the first character in the string that is in \arg
     /// Chars, or npos if not found.
     ///
-    /// Note: O(size() * Chars.size())
+    /// Note: O(size() + Chars.size())
     size_type find_first_of(StringRef Chars, size_t From = 0) const;
 
     /// find_first_not_of - Find the first character in the string that is not
@@ -243,7 +253,7 @@
     /// find_first_not_of - Find the first character in the string that is not
     /// in the string \arg Chars, or npos if not found.
     ///
-    /// Note: O(size() * Chars.size())
+    /// Note: O(size() + Chars.size())
     size_type find_first_not_of(StringRef Chars, size_t From = 0) const;
 
     /// @}

Modified: llvm/branches/wendling/eh/include/llvm/ADT/StringSwitch.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/StringSwitch.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/StringSwitch.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/StringSwitch.h Tue Oct 26 19:48:03 2010
@@ -61,6 +61,26 @@
     return *this;
   }
 
+  template<unsigned N>
+  StringSwitch& EndsWith(const char (&S)[N], const T &Value) {
+    if (!Result && Str.size() >= N-1 &&
+        std::memcmp(S, Str.data() + Str.size() + 1 - N, N-1) == 0) {
+      Result = &Value;
+    }
+
+    return *this;
+  }
+
+  template<unsigned N>
+  StringSwitch& StartsWith(const char (&S)[N], const T &Value) {
+    if (!Result && Str.size() >= N-1 &&
+        std::memcmp(S, Str.data(), N-1) == 0) {
+      Result = &Value;
+    }
+
+    return *this;
+  }
+
   template<unsigned N0, unsigned N1>
   StringSwitch& Cases(const char (&S0)[N0], const char (&S1)[N1],
                       const T& Value) {

Modified: llvm/branches/wendling/eh/include/llvm/ADT/Triple.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/Triple.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/Triple.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/Triple.h Tue Oct 26 19:48:03 2010
@@ -24,7 +24,7 @@
 
 /// Triple - Helper class for working with target triples.
 ///
-/// Target triples are strings in the format of:
+/// Target triples are strings in the canonical form:
 ///   ARCHITECTURE-VENDOR-OPERATING_SYSTEM
 /// or
 ///   ARCHITECTURE-VENDOR-OPERATING_SYSTEM-ENVIRONMENT
@@ -35,20 +35,11 @@
 /// from the components of the target triple to well known IDs.
 ///
 /// At its core the Triple class is designed to be a wrapper for a triple
-/// string; it does not normally change or normalize the triple string, instead
-/// it provides additional APIs to parse normalized parts out of the triple.
+/// string; the constructor does not change or normalize the triple string.
+/// Clients that need to handle the non-canonical triples that users often
+/// specify should use the normalize method.
 ///
-/// One curiosity this implies is that for some odd triples the results of,
-/// e.g., getOSName() can be very different from the result of getOS().  For
-/// example, for 'i386-mingw32', getOS() will return MinGW32, but since
-/// getOSName() is purely based on the string structure that will return the
-/// empty string.
-///
-/// Clients should generally avoid using getOSName() and related APIs unless
-/// they are familiar with the triple format (this is particularly true when
-/// rewriting a triple).
-///
-/// See autoconf/config.guess for a glimpse into what they look like in
+/// See autoconf/config.guess for a glimpse into what triples look like in
 /// practice.
 class Triple {
 public:
@@ -74,6 +65,7 @@
     x86_64,  // X86-64: amd64, x86_64
     xcore,   // XCore: xcore
     mblaze,  // MBlaze: mblaze
+    ptx,     // PTX: ptx
 
     InvalidArch
   };
@@ -103,6 +95,9 @@
     Haiku,
     Minix
   };
+  enum EnvironmentType {
+    UnknownEnvironment
+  };
   
 private:
   std::string Data;
@@ -116,7 +111,14 @@
   /// The parsed OS type.
   mutable OSType OS;
 
+  /// The parsed Environment type.
+  mutable EnvironmentType Environment;
+
   bool isInitialized() const { return Arch != InvalidArch; }
+  static ArchType ParseArch(StringRef ArchName);
+  static VendorType ParseVendor(StringRef VendorName);
+  static OSType ParseOS(StringRef OSName);
+  static EnvironmentType ParseEnvironment(StringRef EnvironmentName);
   void Parse() const;
 
 public:
@@ -133,6 +135,27 @@
     Data += OSStr;
   }
 
+  explicit Triple(StringRef ArchStr, StringRef VendorStr, StringRef OSStr,
+    StringRef EnvironmentStr)
+    : Data(ArchStr), Arch(InvalidArch) {
+    Data += '-';
+    Data += VendorStr;
+    Data += '-';
+    Data += OSStr;
+    Data += '-';
+    Data += EnvironmentStr;
+  }
+
+  /// @}
+  /// @name Normalization
+  /// @{
+
+  /// normalize - Turn an arbitrary machine specification into the canonical
+  /// triple form (or something sensible that the Triple class understands if
+  /// nothing better can reasonably be done).  In particular, it handles the
+  /// common case in which otherwise valid components are in the wrong order.
+  static std::string normalize(StringRef Str);
+
   /// @}
   /// @name Typed Component Access
   /// @{
@@ -161,6 +184,12 @@
     return getEnvironmentName() != "";
   }
 
+  /// getEnvironment - Get the parsed environment type of this triple.
+  EnvironmentType getEnvironment() const { 
+    if (!isInitialized()) Parse(); 
+    return Environment;
+  }
+
   /// @}
   /// @name Direct Component Access
   /// @{
@@ -220,6 +249,10 @@
   /// to a known type.
   void setOS(OSType Kind);
 
+  /// setEnvironment - Set the environment (fourth) component of the triple
+  /// to a known type.
+  void setEnvironment(EnvironmentType Kind);
+
   /// setTriple - Set all components to the new triple \arg Str.
   void setTriple(const Twine &Str);
 
@@ -267,9 +300,14 @@
   /// vendor.
   static const char *getVendorTypeName(VendorType Kind);
 
-  /// getOSTypeName - Get the canonical name for the \arg Kind vendor.
+  /// getOSTypeName - Get the canonical name for the \arg Kind operating
+  /// system.
   static const char *getOSTypeName(OSType Kind);
 
+  /// getEnvironmentTypeName - Get the canonical name for the \arg Kind
+  /// environment.
+  static const char *getEnvironmentTypeName(EnvironmentType Kind);
+
   /// @}
   /// @name Static helpers for converting alternate architecture names.
   /// @{

Modified: llvm/branches/wendling/eh/include/llvm/ADT/ValueMap.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/ValueMap.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/ValueMap.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/ValueMap.h Tue Oct 26 19:48:03 2010
@@ -82,18 +82,13 @@
   typedef typename Config::ExtraData ExtraData;
   MapT Map;
   ExtraData Data;
+  ValueMap(const ValueMap&); // DO NOT IMPLEMENT
+  ValueMap& operator=(const ValueMap&); // DO NOT IMPLEMENT
 public:
   typedef KeyT key_type;
   typedef ValueT mapped_type;
   typedef std::pair<KeyT, ValueT> value_type;
 
-  ValueMap(const ValueMap& Other) : Map(Other.Map), Data(Other.Data) {
-    // Each ValueMapCVH key contains a pointer to the containing ValueMap.
-    // The keys in the new map need to point to the new map, not Other.
-    for (typename MapT::iterator I = Map.begin(), E = Map.end(); I != E; ++I)
-      I->first.Map = this;
-  }
-
   explicit ValueMap(unsigned NumInitBuckets = 64)
     : Map(NumInitBuckets), Data() {}
   explicit ValueMap(const ExtraData &Data, unsigned NumInitBuckets = 64)
@@ -154,7 +149,7 @@
   bool erase(const KeyT &Val) {
     return Map.erase(Wrap(Val));
   }
-  bool erase(iterator I) {
+  void erase(iterator I) {
     return Map.erase(I.base());
   }
 
@@ -166,12 +161,6 @@
     return Map[Wrap(Key)];
   }
 
-  ValueMap& operator=(const ValueMap& Other) {
-    Map = Other.Map;
-    Data = Other.Data;
-    return *this;
-  }
-
   /// isPointerIntoBucketsArray - Return true if the specified pointer points
   /// somewhere into the ValueMap's array of buckets (i.e. either to a key or
   /// value in the ValueMap).

Modified: llvm/branches/wendling/eh/include/llvm/ADT/ilist.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ADT/ilist.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ADT/ilist.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ADT/ilist.h Tue Oct 26 19:48:03 2010
@@ -614,7 +614,6 @@
 
   template<class Pr3> void sort(Pr3 pred);
   void sort() { sort(op_less); }
-  void reverse();
 };
 
 

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/AliasAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/AliasAnalysis.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/AliasAnalysis.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/AliasAnalysis.h Tue Oct 26 19:48:03 2010
@@ -18,12 +18,9 @@
 //
 // This API represents memory as a (Pointer, Size) pair.  The Pointer component
 // specifies the base memory address of the region, the Size specifies how large
-// of an area is being queried.  If Size is 0, two pointers only alias if they
-// are exactly equal.  If size is greater than zero, but small, the two pointers
-// alias if the areas pointed to overlap.  If the size is very large (ie, ~0U),
-// then the two pointers alias if they may be pointing to components of the same
-// memory object.  Pointers that point to two completely different objects in
-// memory never alias, regardless of the value of the Size component.
+// of an area is being queried, or UnknownSize if the size is not known.
+// Pointers that point to two completely different objects in memory never
+// alias, regardless of the value of the Size component.
 //
 //===----------------------------------------------------------------------===//
 
@@ -31,7 +28,6 @@
 #define LLVM_ANALYSIS_ALIAS_ANALYSIS_H
 
 #include "llvm/Support/CallSite.h"
-#include "llvm/System/IncludeFile.h"
 #include <vector>
 
 namespace llvm {
@@ -46,8 +42,11 @@
 class AliasAnalysis {
 protected:
   const TargetData *TD;
+
+private:
   AliasAnalysis *AA;       // Previous Alias Analysis to chain to.
 
+protected:
   /// InitializeAliasAnalysis - Subclasses must call this method to initialize
   /// the AliasAnalysis interface before any other methods are called.  This is
   /// typically called by the run* methods of these subclasses.  This may be
@@ -64,6 +63,11 @@
   AliasAnalysis() : TD(0), AA(0) {}
   virtual ~AliasAnalysis();  // We want to be subclassed
 
+  /// UnknownSize - This is a special value which can be used with the
+  /// size arguments in alias queries to indicate that the caller does not
+  /// know the sizes of the potential memory references.
+  static uint64_t const UnknownSize = ~UINT64_C(0);
+
   /// getTargetData - Return a pointer to the current TargetData object, or
   /// null if no TargetData object is available.
   ///
@@ -72,40 +76,90 @@
   /// getTypeStoreSize - Return the TargetData store size for the given type,
   /// if known, or a conservative value otherwise.
   ///
-  unsigned getTypeStoreSize(const Type *Ty);
+  uint64_t getTypeStoreSize(const Type *Ty);
 
   //===--------------------------------------------------------------------===//
   /// Alias Queries...
   ///
 
+  /// Location - A description of a memory location.
+  struct Location {
+    /// Ptr - The address of the start of the location.
+    const Value *Ptr;
+    /// Size - The size of the location.
+    uint64_t Size;
+    /// TBAATag - The metadata node which describes the TBAA type of
+    /// the location, or null if there is no (unique) tag.
+    const MDNode *TBAATag;
+
+    explicit Location(const Value *P = 0,
+                      uint64_t S = UnknownSize,
+                      const MDNode *N = 0)
+      : Ptr(P), Size(S), TBAATag(N) {}
+
+    Location getWithNewPtr(const Value *NewPtr) const {
+      Location Copy(*this);
+      Copy.Ptr = NewPtr;
+      return Copy;
+    }
+
+    Location getWithoutTBAATag() const {
+      Location Copy(*this);
+      Copy.TBAATag = 0;
+      return Copy;
+    }
+  };
+
   /// Alias analysis result - Either we know for sure that it does not alias, we
   /// know for sure it must alias, or we don't know anything: The two pointers
   /// _might_ alias.  This enum is designed so you can do things like:
   ///     if (AA.alias(P1, P2)) { ... }
   /// to check to see if two pointers might alias.
   ///
+  /// See docs/AliasAnalysis.html for more information on the specific meanings
+  /// of these values.
+  ///
   enum AliasResult { NoAlias = 0, MayAlias = 1, MustAlias = 2 };
 
   /// alias - The main low level interface to the alias analysis implementation.
   /// Returns a Result indicating whether the two pointers are aliased to each
   /// other.  This is the interface that must be implemented by specific alias
   /// analysis implementations.
-  ///
-  virtual AliasResult alias(const Value *V1, unsigned V1Size,
-                            const Value *V2, unsigned V2Size);
+  virtual AliasResult alias(const Location &LocA, const Location &LocB);
+
+  /// alias - A convenience wrapper.
+  AliasResult alias(const Value *V1, uint64_t V1Size,
+                    const Value *V2, uint64_t V2Size) {
+    return alias(Location(V1, V1Size), Location(V2, V2Size));
+  }
+
+  /// alias - A convenience wrapper.
+  AliasResult alias(const Value *V1, const Value *V2) {
+    return alias(V1, UnknownSize, V2, UnknownSize);
+  }
 
   /// isNoAlias - A trivial helper function to check to see if the specified
   /// pointers are no-alias.
-  bool isNoAlias(const Value *V1, unsigned V1Size,
-                 const Value *V2, unsigned V2Size) {
-    return alias(V1, V1Size, V2, V2Size) == NoAlias;
+  bool isNoAlias(const Location &LocA, const Location &LocB) {
+    return alias(LocA, LocB) == NoAlias;
   }
 
-  /// pointsToConstantMemory - If the specified pointer is known to point into
-  /// constant global memory, return true.  This allows disambiguation of store
+  /// isNoAlias - A convenience wrapper.
+  bool isNoAlias(const Value *V1, uint64_t V1Size,
+                 const Value *V2, uint64_t V2Size) {
+    return isNoAlias(Location(V1, V1Size), Location(V2, V2Size));
+  }
+
+  /// pointsToConstantMemory - If the specified memory location is known to be
+  /// constant, return true.  This allows disambiguation of store
   /// instructions from constant pointers.
   ///
-  virtual bool pointsToConstantMemory(const Value *P);
+  virtual bool pointsToConstantMemory(const Location &Loc);
+
+  /// pointsToConstantMemory - A convenient wrapper.
+  bool pointsToConstantMemory(const Value *P) {
+    return pointsToConstantMemory(Location(P));
+  }
 
   //===--------------------------------------------------------------------===//
   /// Simple mod/ref information...
@@ -130,17 +184,11 @@
 
     // AccessesArguments - This function accesses function arguments in well
     // known (possibly volatile) ways, but does not access any other memory.
-    //
-    // Clients may use the Info parameter of getModRefBehavior to get specific
-    // information about how pointer arguments are used.
     AccessesArguments,
 
     // AccessesArgumentsAndGlobals - This function has accesses function
     // arguments and global variables well known (possibly volatile) ways, but
     // does not access any other memory.
-    //
-    // Clients may use the Info parameter of getModRefBehavior to get specific
-    // information about how pointer arguments are used.
     AccessesArgumentsAndGlobals,
 
     // OnlyReadsMemory - This function does not perform any non-local stores or
@@ -154,31 +202,17 @@
     UnknownModRefBehavior
   };
 
-  /// PointerAccessInfo - This struct is used to return results for pointers,
-  /// globals, and the return value of a function.
-  struct PointerAccessInfo {
-    /// V - The value this record corresponds to.  This may be an Argument for
-    /// the function, a GlobalVariable, or null, corresponding to the return
-    /// value for the function.
-    Value *V;
-
-    /// ModRefInfo - Whether the pointer is loaded or stored to/from.
-    ///
-    ModRefResult ModRefInfo;
-  };
-
   /// getModRefBehavior - Return the behavior when calling the given call site.
-  virtual ModRefBehavior getModRefBehavior(CallSite CS,
-                                   std::vector<PointerAccessInfo> *Info = 0);
+  virtual ModRefBehavior getModRefBehavior(ImmutableCallSite CS);
 
   /// getModRefBehavior - Return the behavior when calling the given function.
   /// For use when the call site is not known.
-  virtual ModRefBehavior getModRefBehavior(Function *F,
-                                   std::vector<PointerAccessInfo> *Info = 0);
+  virtual ModRefBehavior getModRefBehavior(const Function *F);
 
-  /// getModRefBehavior - Return the modref behavior of the intrinsic with the
-  /// given id.
-  static ModRefBehavior getModRefBehavior(unsigned iid);
+  /// getIntrinsicModRefBehavior - Return the modref behavior of the intrinsic
+  /// with the given id.  Most clients won't need this, because the regular
+  /// getModRefBehavior incorporates this information.
+  static ModRefBehavior getIntrinsicModRefBehavior(unsigned iid);
 
   /// doesNotAccessMemory - If the specified call is known to never read or
   /// write memory, return true.  If the call only reads from known-constant
@@ -191,14 +225,14 @@
   ///
   /// This property corresponds to the GCC 'const' attribute.
   ///
-  bool doesNotAccessMemory(CallSite CS) {
+  bool doesNotAccessMemory(ImmutableCallSite CS) {
     return getModRefBehavior(CS) == DoesNotAccessMemory;
   }
 
   /// doesNotAccessMemory - If the specified function is known to never read or
   /// write memory, return true.  For use when the call site is not known.
   ///
-  bool doesNotAccessMemory(Function *F) {
+  bool doesNotAccessMemory(const Function *F) {
     return getModRefBehavior(F) == DoesNotAccessMemory;
   }
 
@@ -211,7 +245,7 @@
   ///
   /// This property corresponds to the GCC 'pure' attribute.
   ///
-  bool onlyReadsMemory(CallSite CS) {
+  bool onlyReadsMemory(ImmutableCallSite CS) {
     ModRefBehavior MRB = getModRefBehavior(CS);
     return MRB == DoesNotAccessMemory || MRB == OnlyReadsMemory;
   }
@@ -220,70 +254,127 @@
   /// non-volatile memory (or not access memory at all), return true.  For use
   /// when the call site is not known.
   ///
-  bool onlyReadsMemory(Function *F) {
+  bool onlyReadsMemory(const Function *F) {
     ModRefBehavior MRB = getModRefBehavior(F);
     return MRB == DoesNotAccessMemory || MRB == OnlyReadsMemory;
   }
 
 
   /// getModRefInfo - Return information about whether or not an instruction may
-  /// read or write memory specified by the pointer operand.  An instruction
+  /// read or write the specified memory location.  An instruction
   /// that doesn't read or write memory may be trivially LICM'd for example.
+  ModRefResult getModRefInfo(const Instruction *I,
+                             const Location &Loc) {
+    switch (I->getOpcode()) {
+    case Instruction::VAArg:  return getModRefInfo((const VAArgInst*)I, Loc);
+    case Instruction::Load:   return getModRefInfo((const LoadInst*)I,  Loc);
+    case Instruction::Store:  return getModRefInfo((const StoreInst*)I, Loc);
+    case Instruction::Call:   return getModRefInfo((const CallInst*)I,  Loc);
+    case Instruction::Invoke: return getModRefInfo((const InvokeInst*)I,Loc);
+    default:                  return NoModRef;
+    }
+  }
+
+  /// getModRefInfo - A convenience wrapper.
+  ModRefResult getModRefInfo(const Instruction *I,
+                             const Value *P, uint64_t Size) {
+    return getModRefInfo(I, Location(P, Size));
+  }
 
   /// getModRefInfo (for call sites) - Return whether information about whether
-  /// a particular call site modifies or reads the memory specified by the
-  /// pointer.
-  ///
-  virtual ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size);
+  /// a particular call site modifies or reads the specified memory location.
+  virtual ModRefResult getModRefInfo(ImmutableCallSite CS,
+                                     const Location &Loc);
+
+  /// getModRefInfo (for call sites) - A convenience wrapper.
+  ModRefResult getModRefInfo(ImmutableCallSite CS,
+                             const Value *P, uint64_t Size) {
+    return getModRefInfo(CS, Location(P, Size));
+  }
 
-  /// getModRefInfo - Return information about whether two call sites may refer
-  /// to the same set of memory locations.  This function returns NoModRef if
-  /// the two calls refer to disjoint memory locations, Ref if CS1 reads memory
-  /// written by CS2, Mod if CS1 writes to memory read or written by CS2, or
-  /// ModRef if CS1 might read or write memory accessed by CS2.
-  ///
-  virtual ModRefResult getModRefInfo(CallSite CS1, CallSite CS2);
+  /// getModRefInfo (for calls) - Return whether information about whether
+  /// a particular call modifies or reads the specified memory location.
+  ModRefResult getModRefInfo(const CallInst *C, const Location &Loc) {
+    return getModRefInfo(ImmutableCallSite(C), Loc);
+  }
 
-public:
-  /// Convenience functions...
-  ModRefResult getModRefInfo(LoadInst *L, Value *P, unsigned Size);
-  ModRefResult getModRefInfo(StoreInst *S, Value *P, unsigned Size);
-  ModRefResult getModRefInfo(CallInst *C, Value *P, unsigned Size) {
-    return getModRefInfo(CallSite(C), P, Size);
+  /// getModRefInfo (for calls) - A convenience wrapper.
+  ModRefResult getModRefInfo(const CallInst *C, const Value *P, uint64_t Size) {
+    return getModRefInfo(C, Location(P, Size));
   }
-  ModRefResult getModRefInfo(InvokeInst *I, Value *P, unsigned Size) {
-    return getModRefInfo(CallSite(I), P, Size);
+
+  /// getModRefInfo (for invokes) - Return whether information about whether
+  /// a particular invoke modifies or reads the specified memory location.
+  ModRefResult getModRefInfo(const InvokeInst *I,
+                             const Location &Loc) {
+    return getModRefInfo(ImmutableCallSite(I), Loc);
   }
-  ModRefResult getModRefInfo(VAArgInst* I, Value* P, unsigned Size) {
-    return AliasAnalysis::ModRef;
+
+  /// getModRefInfo (for invokes) - A convenience wrapper.
+  ModRefResult getModRefInfo(const InvokeInst *I,
+                             const Value *P, uint64_t Size) {
+    return getModRefInfo(I, Location(P, Size));
   }
-  ModRefResult getModRefInfo(Instruction *I, Value *P, unsigned Size) {
-    switch (I->getOpcode()) {
-    case Instruction::VAArg:  return getModRefInfo((VAArgInst*)I, P, Size);
-    case Instruction::Load:   return getModRefInfo((LoadInst*)I, P, Size);
-    case Instruction::Store:  return getModRefInfo((StoreInst*)I, P, Size);
-    case Instruction::Call:   return getModRefInfo((CallInst*)I, P, Size);
-    case Instruction::Invoke: return getModRefInfo((InvokeInst*)I, P, Size);
-    default:                  return NoModRef;
-    }
+
+  /// getModRefInfo (for loads) - Return whether information about whether
+  /// a particular load modifies or reads the specified memory location.
+  ModRefResult getModRefInfo(const LoadInst *L, const Location &Loc);
+
+  /// getModRefInfo (for loads) - A convenience wrapper.
+  ModRefResult getModRefInfo(const LoadInst *L, const Value *P, uint64_t Size) {
+    return getModRefInfo(L, Location(P, Size));
   }
 
+  /// getModRefInfo (for stores) - Return whether information about whether
+  /// a particular store modifies or reads the specified memory location.
+  ModRefResult getModRefInfo(const StoreInst *S, const Location &Loc);
+
+  /// getModRefInfo (for stores) - A convenience wrapper.
+  ModRefResult getModRefInfo(const StoreInst *S, const Value *P, uint64_t Size) {
+    return getModRefInfo(S, Location(P, Size));
+  }
+
+  /// getModRefInfo (for va_args) - Return whether information about whether
+  /// a particular va_arg modifies or reads the specified memory location.
+  ModRefResult getModRefInfo(const VAArgInst* I, const Location &Loc);
+
+  /// getModRefInfo (for va_args) - A convenience wrapper.
+  ModRefResult getModRefInfo(const VAArgInst* I, const Value* P, uint64_t Size) {
+    return getModRefInfo(I, Location(P, Size));
+  }
+
+  /// getModRefInfo - Return information about whether two call sites may refer
+  /// to the same set of memory locations.  See 
+  ///   http://llvm.org/docs/AliasAnalysis.html#ModRefInfo
+  /// for details.
+  virtual ModRefResult getModRefInfo(ImmutableCallSite CS1,
+                                     ImmutableCallSite CS2);
+
   //===--------------------------------------------------------------------===//
   /// Higher level methods for querying mod/ref information.
   ///
 
   /// canBasicBlockModify - Return true if it is possible for execution of the
   /// specified basic block to modify the value pointed to by Ptr.
-  ///
-  bool canBasicBlockModify(const BasicBlock &BB, const Value *P, unsigned Size);
+  bool canBasicBlockModify(const BasicBlock &BB, const Location &Loc);
+
+  /// canBasicBlockModify - A convenience wrapper.
+  bool canBasicBlockModify(const BasicBlock &BB, const Value *P, uint64_t Size){
+    return canBasicBlockModify(BB, Location(P, Size));
+  }
 
   /// canInstructionRangeModify - Return true if it is possible for the
   /// execution of the specified instructions to modify the value pointed to by
   /// Ptr.  The instructions to consider are all of the instructions in the
   /// range of [I1,I2] INCLUSIVE.  I1 and I2 must be in the same basic block.
-  ///
   bool canInstructionRangeModify(const Instruction &I1, const Instruction &I2,
-                                 const Value *Ptr, unsigned Size);
+                                 const Location &Loc);
+
+  /// canInstructionRangeModify - A convenience wrapper.
+  bool canInstructionRangeModify(const Instruction &I1, const Instruction &I2,
+                                 const Value *Ptr, uint64_t Size) {
+    return canInstructionRangeModify(I1, I2, Location(Ptr, Size));
+  }
 
   //===--------------------------------------------------------------------===//
   /// Methods that clients should call when they transform the program to allow
@@ -330,11 +421,4 @@
 
 } // End llvm namespace
 
-// Because of the way .a files work, we must force the BasicAA implementation to
-// be pulled in if the AliasAnalysis header is included.  Otherwise we run
-// the risk of AliasAnalysis being used, but the default implementation not
-// being linked into the tool that uses it.
-FORCE_DEFINING_FILE_TO_BE_LINKED(AliasAnalysis)
-FORCE_DEFINING_FILE_TO_BE_LINKED(BasicAliasAnalysis)
-
 #endif

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/AliasSetTracker.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/AliasSetTracker.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/AliasSetTracker.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/AliasSetTracker.h Tue Oct 26 19:48:03 2010
@@ -40,10 +40,12 @@
     Value *Val;  // The pointer this record corresponds to.
     PointerRec **PrevInList, *NextInList;
     AliasSet *AS;
-    unsigned Size;
+    uint64_t Size;
+    const MDNode *TBAAInfo;
   public:
     PointerRec(Value *V)
-      : Val(V), PrevInList(0), NextInList(0), AS(0), Size(0) {}
+      : Val(V), PrevInList(0), NextInList(0), AS(0), Size(0),
+        TBAAInfo(DenseMapInfo<const MDNode *>::getEmptyKey()) {}
 
     Value *getValue() const { return Val; }
     
@@ -55,11 +57,28 @@
       return &NextInList;
     }
 
-    void updateSize(unsigned NewSize) {
+    void updateSizeAndTBAAInfo(uint64_t NewSize, const MDNode *NewTBAAInfo) {
       if (NewSize > Size) Size = NewSize;
-    }
 
-    unsigned getSize() const { return Size; }
+      if (TBAAInfo == DenseMapInfo<const MDNode *>::getEmptyKey())
+        // We don't have a TBAAInfo yet. Set it to NewTBAAInfo.
+        TBAAInfo = NewTBAAInfo;
+      else if (TBAAInfo != NewTBAAInfo)
+        // NewTBAAInfo conflicts with TBAAInfo.
+        TBAAInfo = DenseMapInfo<const MDNode *>::getTombstoneKey();
+    }
+
+    uint64_t getSize() const { return Size; }
+
+    /// getTBAAInfo - Return the TBAAInfo, or null if there is no
+    /// information or conflicting information.
+    const MDNode *getTBAAInfo() const {
+      // If we have missing or conflicting TBAAInfo, return null.
+      if (TBAAInfo == DenseMapInfo<const MDNode *>::getEmptyKey() ||
+          TBAAInfo == DenseMapInfo<const MDNode *>::getTombstoneKey())
+        return 0;
+      return TBAAInfo;
+    }
 
     AliasSet *getAliasSet(AliasSetTracker &AST) {
       assert(AS && "No AliasSet yet!");
@@ -92,7 +111,8 @@
   AliasSet *Forward;             // Forwarding pointer.
   AliasSet *Next, *Prev;         // Doubly linked list of AliasSets.
 
-  std::vector<CallSite> CallSites; // All calls & invokes in this alias set.
+  // All calls & invokes in this alias set.
+  std::vector<AssertingVH<Instruction> > CallSites;
 
   // RefCount - Number of nodes pointing to this AliasSet plus the number of
   // AliasSets forwarding to it.
@@ -127,6 +147,11 @@
       removeFromTracker(AST);
   }
 
+  CallSite getCallSite(unsigned i) const {
+    assert(i < CallSites.size());
+    return CallSite(CallSites[i]);
+  }
+  
 public:
   /// Accessors...
   bool isRef() const { return AccessTy & Refs; }
@@ -180,7 +205,8 @@
     value_type *operator->() const { return &operator*(); }
 
     Value *getPointer() const { return CurNode->getValue(); }
-    unsigned getSize() const { return CurNode->getSize(); }
+    uint64_t getSize() const { return CurNode->getSize(); }
+    const MDNode *getTBAAInfo() const { return CurNode->getTBAAInfo(); }
 
     iterator& operator++() {                // Preincrement
       assert(CurNode && "Advancing past AliasSet.end()!");
@@ -224,12 +250,13 @@
 
   void removeFromTracker(AliasSetTracker &AST);
 
-  void addPointer(AliasSetTracker &AST, PointerRec &Entry, unsigned Size,
+  void addPointer(AliasSetTracker &AST, PointerRec &Entry, uint64_t Size,
+                  const MDNode *TBAAInfo,
                   bool KnownMustAlias = false);
   void addCallSite(CallSite CS, AliasAnalysis &AA);
   void removeCallSite(CallSite CS) {
     for (size_t i = 0, e = CallSites.size(); i != e; ++i)
-      if (CallSites[i].getInstruction() == CS.getInstruction()) {
+      if (CallSites[i] == CS.getInstruction()) {
         CallSites[i] = CallSites.back();
         CallSites.pop_back();
       }
@@ -239,7 +266,8 @@
   /// aliasesPointer - Return true if the specified pointer "may" (or must)
   /// alias one of the members in the set.
   ///
-  bool aliasesPointer(const Value *Ptr, unsigned Size, AliasAnalysis &AA) const;
+  bool aliasesPointer(const Value *Ptr, uint64_t Size, const MDNode *TBAAInfo,
+                      AliasAnalysis &AA) const;
   bool aliasesCallSite(CallSite CS, AliasAnalysis &AA) const;
 };
 
@@ -292,7 +320,7 @@
   /// These methods return true if inserting the instruction resulted in the
   /// addition of a new alias set (i.e., the pointer did not alias anything).
   ///
-  bool add(Value *Ptr, unsigned Size);  // Add a location
+  bool add(Value *Ptr, uint64_t Size, const MDNode *TBAAInfo); // Add a location
   bool add(LoadInst *LI);
   bool add(StoreInst *SI);
   bool add(VAArgInst *VAAI);
@@ -306,7 +334,8 @@
   /// remove methods - These methods are used to remove all entries that might
   /// be aliased by the specified instruction.  These methods return true if any
   /// alias sets were eliminated.
-  bool remove(Value *Ptr, unsigned Size);  // Remove a location
+  // Remove a location
+  bool remove(Value *Ptr, uint64_t Size, const MDNode *TBAAInfo);
   bool remove(LoadInst *LI);
   bool remove(StoreInst *SI);
   bool remove(VAArgInst *VAAI);
@@ -326,18 +355,21 @@
   /// lives in.  If the New argument is non-null, this method sets the value to
   /// true if a new alias set is created to contain the pointer (because the
   /// pointer didn't alias anything).
-  AliasSet &getAliasSetForPointer(Value *P, unsigned Size, bool *New = 0);
+  AliasSet &getAliasSetForPointer(Value *P, uint64_t Size,
+                                  const MDNode *TBAAInfo,
+                                  bool *New = 0);
 
   /// getAliasSetForPointerIfExists - Return the alias set containing the
   /// location specified if one exists, otherwise return null.
-  AliasSet *getAliasSetForPointerIfExists(Value *P, unsigned Size) {
-    return findAliasSetForPointer(P, Size);
+  AliasSet *getAliasSetForPointerIfExists(Value *P, uint64_t Size,
+                                          const MDNode *TBAAInfo) {
+    return findAliasSetForPointer(P, Size, TBAAInfo);
   }
 
   /// containsPointer - Return true if the specified location is represented by
   /// this alias set, false otherwise.  This does not modify the AST object or
   /// alias sets.
-  bool containsPointer(Value *P, unsigned Size) const;
+  bool containsPointer(Value *P, uint64_t Size, const MDNode *TBAAInfo) const;
 
   /// getAliasAnalysis - Return the underlying alias analysis object used by
   /// this tracker.
@@ -384,14 +416,16 @@
     return *Entry;
   }
 
-  AliasSet &addPointer(Value *P, unsigned Size, AliasSet::AccessType E,
+  AliasSet &addPointer(Value *P, uint64_t Size, const MDNode *TBAAInfo,
+                       AliasSet::AccessType E,
                        bool &NewSet) {
     NewSet = false;
-    AliasSet &AS = getAliasSetForPointer(P, Size, &NewSet);
+    AliasSet &AS = getAliasSetForPointer(P, Size, TBAAInfo, &NewSet);
     AS.AccessTy |= E;
     return AS;
   }
-  AliasSet *findAliasSetForPointer(const Value *Ptr, unsigned Size);
+  AliasSet *findAliasSetForPointer(const Value *Ptr, uint64_t Size,
+                                   const MDNode *TBAAInfo);
 
   AliasSet *findAliasSetForCallSite(CallSite CS);
 };

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/CodeMetrics.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/CodeMetrics.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/CodeMetrics.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/CodeMetrics.h Tue Oct 26 19:48:03 2010
@@ -45,6 +45,11 @@
 
     /// NumCalls - Keep track of the number of calls to 'big' functions.
     unsigned NumCalls;
+    
+    /// NumInlineCandidates - Keep track of the number of calls to internal
+    /// functions with only a single caller.  These are likely targets for
+    /// future inlining, likely exposed by interleaved devirtualization.
+    unsigned NumInlineCandidates;
 
     /// NumVectorInsts - Keep track of how many instructions produce vector
     /// values.  The inliner is being more aggressive with inlining vector
@@ -56,7 +61,8 @@
 
     CodeMetrics() : callsSetJmp(false), isRecursive(false),
                     containsIndirectBr(false), usesDynamicAlloca(false), 
-                    NumInsts(0), NumBlocks(0), NumCalls(0), NumVectorInsts(0), 
+                    NumInsts(0), NumBlocks(0), NumCalls(0),
+                    NumInlineCandidates(0), NumVectorInsts(0), 
                     NumRets(0) {}
 
     /// analyzeBasicBlock - Add information about the specified basic block
@@ -66,6 +72,22 @@
     /// analyzeFunction - Add information about the specified function
     /// to the current structure.
     void analyzeFunction(Function *F);
+    
+    /// CountCodeReductionForConstant - Figure out an approximation for how
+    /// many instructions will be constant folded if the specified value is
+    /// constant.
+    unsigned CountCodeReductionForConstant(Value *V);
+   
+    /// CountBonusForConstant - Figure out an approximation for how much
+    /// per-call performance boost we can expect if the specified value is
+    /// constant.
+    unsigned CountBonusForConstant(Value *V);
+
+    /// CountCodeReductionForAlloca - Figure out an approximation of how much
+    /// smaller the function will be if it is inlined into a context where an
+    /// argument becomes an alloca.
+    ///
+    unsigned CountCodeReductionForAlloca(Value *V);
   };
 }
 

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/DOTGraphTraitsPass.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/DOTGraphTraitsPass.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/DOTGraphTraitsPass.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/DOTGraphTraitsPass.h Tue Oct 26 19:48:03 2010
@@ -22,7 +22,7 @@
 struct DOTGraphTraitsViewer : public FunctionPass {
   std::string Name;
 
-  DOTGraphTraitsViewer(std::string GraphName, const void *ID) : FunctionPass(ID) {
+  DOTGraphTraitsViewer(std::string GraphName, char &ID) : FunctionPass(ID) {
     Name = GraphName;
   }
 
@@ -48,7 +48,7 @@
 
   std::string Name;
 
-  DOTGraphTraitsPrinter(std::string GraphName, const void *ID)
+  DOTGraphTraitsPrinter(std::string GraphName, char &ID)
     : FunctionPass(ID) {
     Name = GraphName;
   }
@@ -67,7 +67,7 @@
     Title = GraphName + " for '" + F.getNameStr() + "' function";
 
     if (ErrorInfo.empty())
-      WriteGraph(File, Graph, Simple, Name, Title);
+      WriteGraph(File, Graph, Simple, Title);
     else
       errs() << "  error opening file for writing!";
     errs() << "\n";

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/DebugInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/DebugInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/DebugInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/DebugInfo.h Tue Oct 26 19:48:03 2010
@@ -36,10 +36,28 @@
   class LLVMContext;
   class raw_ostream;
 
+  class DIFile;
+  class DISubprogram;
+  class DILexicalBlock;
+  class DIVariable;
+  class DIType;
+
   /// DIDescriptor - A thin wraper around MDNode to access encoded debug info.
   /// This should not be stored in a container, because underly MDNode may
   /// change in certain situations.
   class DIDescriptor {
+  public:
+    enum {
+      FlagPrivate          = 1 << 0,
+      FlagProtected        = 1 << 1,
+      FlagFwdDecl          = 1 << 2,
+      FlagAppleBlock       = 1 << 3,
+      FlagBlockByrefStruct = 1 << 4,
+      FlagVirtual          = 1 << 5,
+      FlagArtificial       = 1 << 6,
+      FlagExplicit         = 1 << 7,
+      FlagPrototyped       = 1 << 8
+    };
   protected:
     const MDNode *DbgNode;
 
@@ -56,11 +74,17 @@
     }
 
     GlobalVariable *getGlobalVariableField(unsigned Elt) const;
+    Constant *getConstantField(unsigned Elt) const;
     Function *getFunctionField(unsigned Elt) const;
 
   public:
     explicit DIDescriptor() : DbgNode(0) {}
     explicit DIDescriptor(const MDNode *N) : DbgNode(N) {}
+    explicit DIDescriptor(const DIFile F);
+    explicit DIDescriptor(const DISubprogram F);
+    explicit DIDescriptor(const DILexicalBlock F);
+    explicit DIDescriptor(const DIVariable F);
+    explicit DIDescriptor(const DIType F);
 
     bool Verify() const { return DbgNode != 0; }
 
@@ -96,6 +120,7 @@
     bool isEnumerator() const;
     bool isType() const;
     bool isGlobal() const;
+    bool isUnspecifiedParameter() const;
   };
 
   /// DISubrange - This is used to represent ranges, for array bounds.
@@ -148,8 +173,8 @@
     /// module does not contain any main compile unit then the code generator
     /// will emit multiple compile units in the output object file.
 
-    bool isMain() const                { return getUnsignedField(6); }
-    bool isOptimized() const           { return getUnsignedField(7); }
+    bool isMain() const                { return getUnsignedField(6) != 0; }
+    bool isOptimized() const           { return getUnsignedField(7) != 0; }
     StringRef getFlags() const       { return getStringField(8);   }
     unsigned getRunTimeVersion() const { return getUnsignedField(9); }
 
@@ -191,17 +216,6 @@
   /// others do not require a huge and empty descriptor full of zeros.
   class DIType : public DIScope {
   public:
-    enum {
-      FlagPrivate          = 1 << 0,
-      FlagProtected        = 1 << 1,
-      FlagFwdDecl          = 1 << 2,
-      FlagAppleBlock       = 1 << 3,
-      FlagBlockByrefStruct = 1 << 4,
-      FlagVirtual          = 1 << 5,
-      FlagArtificial       = 1 << 6  // To identify artificial arguments in
-                                     // a subroutine type. e.g. "this" in c++.
-    };
-
   protected:
     // This ctor is used when the Tag has already been validated by a derived
     // ctor.
@@ -260,6 +274,10 @@
     StringRef getFilename() const    { return getCompileUnit().getFilename();}
     StringRef getDirectory() const   { return getCompileUnit().getDirectory();}
 
+    /// replaceAllUsesWith - Replace all uses of debug info referenced by
+    /// this descriptor.
+    void replaceAllUsesWith(DIDescriptor &D);
+
     /// print - print type.
     void print(raw_ostream &OS) const;
 
@@ -274,6 +292,9 @@
 
     unsigned getEncoding() const { return getUnsignedField(9); }
 
+    /// Verify - Verify that a basic type descriptor is well formed.
+    bool Verify() const;
+
     /// print - print basic type.
     void print(raw_ostream &OS) const;
 
@@ -297,15 +318,14 @@
     /// return base type size.
     uint64_t getOriginalTypeSize() const;
 
+    /// Verify - Verify that a derived type descriptor is well formed.
+    bool Verify() const;
+
     /// print - print derived type.
     void print(raw_ostream &OS) const;
 
     /// dump - print derived type to dbgs() with a newline.
     void dump() const;
-
-    /// replaceAllUsesWith - Replace all uses of debug info referenced by
-    /// this descriptor.
-    void replaceAllUsesWith(DIDescriptor &D);
   };
 
   /// DICompositeType - This descriptor holds a type that can refer to multiple
@@ -378,7 +398,38 @@
     DICompositeType getContainingType() const {
       return getFieldAs<DICompositeType>(13);
     }
-    unsigned isArtificial() const    { return getUnsignedField(14); }
+    unsigned isArtificial() const    { 
+      if (getVersion() <= llvm::LLVMDebugVersion8)
+        return getUnsignedField(14); 
+      return (getUnsignedField(14) & FlagArtificial) != 0;
+    }
+    /// isPrivate - Return true if this subprogram has "private"
+    /// access specifier.
+    bool isPrivate() const    { 
+      if (getVersion() <= llvm::LLVMDebugVersion8)
+        return false;
+      return (getUnsignedField(14) & FlagPrivate) != 0;
+    }
+    /// isProtected - Return true if this subprogram has "protected"
+    /// access specifier.
+    bool isProtected() const    { 
+      if (getVersion() <= llvm::LLVMDebugVersion8)
+        return false;
+      return (getUnsignedField(14) & FlagProtected) != 0;
+    }
+    /// isExplicit - Return true if this subprogram is marked as explicit.
+    bool isExplicit() const    { 
+      if (getVersion() <= llvm::LLVMDebugVersion8)
+        return false;
+      return (getUnsignedField(14) & FlagExplicit) != 0;
+    }
+    /// isPrototyped - Return true if this subprogram is prototyped.
+    bool isPrototyped() const    { 
+      if (getVersion() <= llvm::LLVMDebugVersion8)
+        return false;
+      return (getUnsignedField(14) & FlagPrototyped) != 0;
+    }
+
     unsigned isOptimized() const;
 
     StringRef getFilename() const    { 
@@ -436,6 +487,7 @@
     unsigned isDefinition() const       { return getUnsignedField(10); }
 
     GlobalVariable *getGlobal() const { return getGlobalVariableField(11); }
+    Constant *getConstant() const   { return getConstantField(11); }
 
     /// Verify - Verify that a global variable descriptor is well formed.
     bool Verify() const;
@@ -465,6 +517,13 @@
     }
     unsigned getLineNumber() const      { return getUnsignedField(4); }
     DIType getType() const              { return getFieldAs<DIType>(5); }
+    
+    /// isArtificial - Return true if this variable is marked as "artificial".
+    bool isArtificial() const    { 
+      if (getVersion() <= llvm::LLVMDebugVersion8)
+        return false;
+      return (getUnsignedField(6) & FlagArtificial) != 0;
+    }
 
 
     /// Verify - Verify that a variable descriptor is well formed.
@@ -575,6 +634,10 @@
     /// implicitly uniques the values returned.
     DISubrange GetOrCreateSubrange(int64_t Lo, int64_t Hi);
 
+    /// CreateUnspecifiedParameter - Create unspeicified type descriptor
+    /// for a subroutine type.
+    DIDescriptor CreateUnspecifiedParameter();
+
     /// CreateCompileUnit - Create a new descriptor for the specified compile
     /// unit.
     DICompileUnit CreateCompileUnit(unsigned LangID,
@@ -641,6 +704,9 @@
                                         unsigned RunTimeLang = 0,
                                         MDNode *ContainingType = 0);
 
+    /// CreateTemporaryType - Create a temporary forward-declared type.
+    DIType CreateTemporaryType();
+
     /// CreateArtificialType - Create a new DIType with "artificial" flag set.
     DIType CreateArtificialType(DIType Ty);
 
@@ -655,7 +721,8 @@
                                           unsigned Flags,
                                           DIType DerivedFrom,
                                           DIArray Elements,
-                                          unsigned RunTimeLang = 0);
+                                          unsigned RunTimeLang = 0,
+                                          MDNode *ContainingType = 0);
 
     /// CreateSubprogram - Create a new descriptor for the specified subprogram.
     /// See comments in DISubprogram for descriptions of these fields.
@@ -668,7 +735,7 @@
                                   unsigned VK = 0,
                                   unsigned VIndex = 0,
                                   DIType = DIType(),
-                                  bool isArtificial = 0,
+                                  unsigned Flags = 0,
                                   bool isOptimized = false,
                                   Function *Fn = 0);
 
@@ -685,19 +752,28 @@
                          unsigned LineNo, DIType Ty, bool isLocalToUnit,
                          bool isDefinition, llvm::GlobalVariable *GV);
 
+    /// CreateGlobalVariable - Create a new descriptor for the specified constant.
+    DIGlobalVariable
+    CreateGlobalVariable(DIDescriptor Context, StringRef Name,
+                         StringRef DisplayName,
+                         StringRef LinkageName,
+                         DIFile F,
+                         unsigned LineNo, DIType Ty, bool isLocalToUnit,
+                         bool isDefinition, llvm::Constant *C);
+
     /// CreateVariable - Create a new descriptor for the specified variable.
     DIVariable CreateVariable(unsigned Tag, DIDescriptor Context,
                               StringRef Name,
                               DIFile F, unsigned LineNo,
-                              DIType Ty, bool AlwaysPreserve = false);
+                              DIType Ty, bool AlwaysPreserve = false,
+                              unsigned Flags = 0);
 
     /// CreateComplexVariable - Create a new descriptor for the specified
     /// variable which has a complex address expression for its address.
     DIVariable CreateComplexVariable(unsigned Tag, DIDescriptor Context,
-                                     const std::string &Name,
-                                     DIFile F, unsigned LineNo,
-                                     DIType Ty,
-                                     SmallVector<Value *, 9> &addr);
+                                     StringRef Name, DIFile F, unsigned LineNo,
+                                     DIType Ty, Value *const *Addr,
+                                     unsigned NumAddr);
 
     /// CreateLexicalBlock - This creates a descriptor for a lexical block
     /// with the specified parent context.
@@ -732,6 +808,11 @@
     /// InsertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
     Instruction *InsertDbgValueIntrinsic(llvm::Value *V, uint64_t Offset,
                                        DIVariable D, Instruction *InsertBefore);
+
+    // RecordType - Record DIType in a module such that it is not lost even if
+    // it is not referenced through debug info anchors.
+    void RecordType(DIType T);
+
   private:
     Constant *GetTagConstant(unsigned TAG);
   };

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/DominatorInternals.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/DominatorInternals.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/DominatorInternals.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/DominatorInternals.h Tue Oct 26 19:48:03 2010
@@ -116,7 +116,7 @@
 template<class GraphT>
 void Compress(DominatorTreeBase<typename GraphT::NodeType>& DT,
               typename GraphT::NodeType *VIn) {
-  std::vector<typename GraphT::NodeType*> Work;
+  SmallVector<typename GraphT::NodeType*, 32> Work;
   SmallPtrSet<typename GraphT::NodeType*, 32> Visited;
   typename DominatorTreeBase<typename GraphT::NodeType>::InfoRec &VInVAInfo =
                                       DT.Info[DT.Vertex[DT.Info[VIn].Ancestor]];

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/Dominators.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/Dominators.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/Dominators.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/Dominators.h Tue Oct 26 19:48:03 2010
@@ -361,8 +361,15 @@
     return dominatedBySlowTreeWalk(A, B);
   }
 
-  inline bool properlyDominates(NodeT *A, NodeT *B) {
-    return properlyDominates(getNode(A), getNode(B));
+  inline bool properlyDominates(const NodeT *A, const NodeT *B) {
+    if (A == B)
+      return false;
+
+    // Cast away the const qualifiers here. This is ok since
+    // this function doesn't actually return the values returned
+    // from getNode.
+    return properlyDominates(getNode(const_cast<NodeT *>(A)),
+                             getNode(const_cast<NodeT *>(B)));
   }
 
   bool dominatedBySlowTreeWalk(const DomTreeNodeBase<NodeT> *A,
@@ -377,7 +384,7 @@
 
   /// isReachableFromEntry - Return true if A is dominated by the entry
   /// block of the function containing it.
-  bool isReachableFromEntry(NodeT* A) {
+  bool isReachableFromEntry(const NodeT* A) {
     assert(!this->isPostDominator() &&
            "This is not implemented for post dominators");
     return dominates(&A->getParent()->front(), A);
@@ -478,6 +485,13 @@
     return NULL;
   }
 
+  const NodeT *findNearestCommonDominator(const NodeT *A, const NodeT *B) {
+    // Cast away the const qualifiers here. This is ok since
+    // const is re-introduced on the return type.
+    return findNearestCommonDominator(const_cast<NodeT *>(A),
+                                      const_cast<NodeT *>(B));
+  }
+
   //===--------------------------------------------------------------------===//
   // API to update (Post)DominatorTree information based on modifications to
   // the CFG...
@@ -509,7 +523,7 @@
   }
 
   /// eraseNode - Removes a node from the dominator tree. Block must not
-  /// domiante any other blocks. Removes node from its immediate dominator's
+  /// dominate any other blocks. Removes node from its immediate dominator's
   /// children list. Deletes dominator node associated with basic block BB.
   void eraseNode(NodeT *BB) {
     DomTreeNodeBase<NodeT> *Node = getNode(BB);
@@ -702,7 +716,8 @@
   static char ID; // Pass ID, replacement for typeid
   DominatorTreeBase<BasicBlock>* DT;
 
-  DominatorTree() : FunctionPass(&ID) {
+  DominatorTree() : FunctionPass(ID) {
+    initializeDominatorTreePass(*PassRegistry::getPassRegistry());
     DT = new DominatorTreeBase<BasicBlock>(false);
   }
 
@@ -767,7 +782,7 @@
     return DT->properlyDominates(A, B);
   }
 
-  bool properlyDominates(BasicBlock *A, BasicBlock *B) const {
+  bool properlyDominates(const BasicBlock *A, const BasicBlock *B) const {
     return DT->properlyDominates(A, B);
   }
 
@@ -777,6 +792,11 @@
     return DT->findNearestCommonDominator(A, B);
   }
 
+  inline const BasicBlock *findNearestCommonDominator(const BasicBlock *A,
+                                                      const BasicBlock *B) {
+    return DT->findNearestCommonDominator(A, B);
+  }
+
   inline DomTreeNode *operator[](BasicBlock *BB) const {
     return DT->getNode(BB);
   }
@@ -807,7 +827,7 @@
   }
 
   /// eraseNode - Removes a node from the dominator tree. Block must not
-  /// domiante any other blocks. Removes node from its immediate dominator's
+  /// dominate any other blocks. Removes node from its immediate dominator's
   /// children list. Deletes dominator node associated with basic block BB.
   inline void eraseNode(BasicBlock *BB) {
     DT->eraseNode(BB);
@@ -819,7 +839,7 @@
     DT->splitBlock(NewBB);
   }
 
-  bool isReachableFromEntry(BasicBlock* A) {
+  bool isReachableFromEntry(const BasicBlock* A) {
     return DT->isReachableFromEntry(A);
   }
 
@@ -890,7 +910,7 @@
   const bool IsPostDominators;
 
 public:
-  DominanceFrontierBase(void *ID, bool isPostDom)
+  DominanceFrontierBase(char &ID, bool isPostDom)
     : FunctionPass(ID), IsPostDominators(isPostDom) {}
 
   /// getRoots - Return the root blocks of the current CFG.  This may include
@@ -1009,7 +1029,9 @@
 public:
   static char ID; // Pass ID, replacement for typeid
   DominanceFrontier() :
-    DominanceFrontierBase(&ID, false) {}
+    DominanceFrontierBase(ID, false) {
+      initializeDominanceFrontierPass(*PassRegistry::getPassRegistry());
+    }
 
   BasicBlock *getRoot() const {
     assert(Roots.size() == 1 && "Should always have entry node!");

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/FindUsedTypes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/FindUsedTypes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/FindUsedTypes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/FindUsedTypes.h Tue Oct 26 19:48:03 2010
@@ -26,7 +26,9 @@
   std::set<const Type *> UsedTypes;
 public:
   static char ID; // Pass identification, replacement for typeid
-  FindUsedTypes() : ModulePass(&ID) {}
+  FindUsedTypes() : ModulePass(ID) {
+    initializeFindUsedTypesPass(*PassRegistry::getPassRegistry());
+  }
 
   /// getTypes - After the pass has been run, return the set containing all of
   /// the types used in the module.

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/InlineCost.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/InlineCost.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/InlineCost.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/InlineCost.h Tue Oct 26 19:48:03 2010
@@ -96,9 +96,11 @@
     public:
       unsigned ConstantWeight;
       unsigned AllocaWeight;
+      unsigned ConstantBonus;
 
-      ArgInfo(unsigned CWeight, unsigned AWeight)
-        : ConstantWeight(CWeight), AllocaWeight(AWeight) {}
+      ArgInfo(unsigned CWeight, unsigned AWeight, unsigned CBonus)
+        : ConstantWeight(CWeight), AllocaWeight(AWeight), ConstantBonus(CBonus)
+          {}
     };
 
     struct FunctionInfo {
@@ -110,16 +112,7 @@
       /// entry here.
       std::vector<ArgInfo> ArgumentWeights;
 
-      /// CountCodeReductionForConstant - Figure out an approximation for how
-      /// many instructions will be constant folded if the specified value is
-      /// constant.
-      unsigned CountCodeReductionForConstant(Value *V);
-
-      /// CountCodeReductionForAlloca - Figure out an approximation of how much
-      /// smaller the function will be if it is inlined into a context where an
-      /// argument becomes an alloca.
-      ///
-      unsigned CountCodeReductionForAlloca(Value *V);
+
 
       /// analyzeFunction - Add information about the specified function
       /// to the current structure.
@@ -150,6 +143,18 @@
                              Function *Callee,
                              SmallPtrSet<const Function *, 16> &NeverInline);
 
+    /// getSpecializationBonus - The heuristic used to determine the per-call
+    /// performance boost for using a specialization of Callee with argument
+    /// SpecializedArgNos replaced by a constant.
+    int getSpecializationBonus(Function *Callee,
+             SmallVectorImpl<unsigned> &SpecializedArgNo);
+
+    /// getSpecializationCost - The heuristic used to determine the code-size
+    /// impact of creating a specialized version of Callee with argument
+    /// SpecializedArgNo replaced by a constant.
+    InlineCost getSpecializationCost(Function *Callee,
+               SmallVectorImpl<unsigned> &SpecializedArgNo);
+
     /// getInlineFudgeFactor - Return a > 1.0 factor if the inliner should use a
     /// higher threshold to determine if the function call should be inlined.
     float getInlineFudgeFactor(CallSite CS);

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/InstructionSimplify.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/InstructionSimplify.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/InstructionSimplify.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/InstructionSimplify.h Tue Oct 26 19:48:03 2010
@@ -71,6 +71,8 @@
   
   /// SimplifyInstruction - See if we can compute a simplified version of this
   /// instruction.  If not, this returns null.
+  /// WARNING: If called on unreachable code, an instruction may be reported
+  /// to simplify to itself.
   Value *SimplifyInstruction(Instruction *I, const TargetData *TD = 0);
   
   

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/IntervalPartition.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/IntervalPartition.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/IntervalPartition.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/IntervalPartition.h Tue Oct 26 19:48:03 2010
@@ -48,7 +48,9 @@
 public:
   static char ID; // Pass identification, replacement for typeid
 
-  IntervalPartition() : FunctionPass(&ID), RootInterval(0) {}
+  IntervalPartition() : FunctionPass(ID), RootInterval(0) {
+    initializeIntervalPartitionPass(*PassRegistry::getPassRegistry());
+  }
 
   // run - Calculate the interval partition for this function
   virtual bool runOnFunction(Function &F);

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/LazyValueInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/LazyValueInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/LazyValueInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/LazyValueInfo.h Tue Oct 26 19:48:03 2010
@@ -12,8 +12,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_ANALYSIS_LIVEVALUES_H
-#define LLVM_ANALYSIS_LIVEVALUES_H
+#ifndef LLVM_ANALYSIS_LAZYVALUEINFO_H
+#define LLVM_ANALYSIS_LAZYVALUEINFO_H
 
 #include "llvm/Pass.h"
 
@@ -31,7 +31,9 @@
   void operator=(const LazyValueInfo&); // DO NOT IMPLEMENT.
 public:
   static char ID;
-  LazyValueInfo() : FunctionPass(&ID), PImpl(0) {}
+  LazyValueInfo() : FunctionPass(ID), PImpl(0) {
+    initializeLazyValueInfoPass(*PassRegistry::getPassRegistry());
+  }
   ~LazyValueInfo() { assert(PImpl == 0 && "releaseMemory not called"); }
 
   /// Tristate - This is used to return true/false/dunno results.
@@ -61,6 +63,8 @@
   /// PredBB to OldSucc to be from PredBB to NewSucc instead.
   void threadEdge(BasicBlock *PredBB, BasicBlock *OldSucc, BasicBlock *NewSucc);
   
+  /// eraseBlock - Inform the analysis cache that we have erased a block.
+  void eraseBlock(BasicBlock *BB);
   
   // Implementation boilerplate.
   

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/LibCallAliasAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/LibCallAliasAnalysis.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/LibCallAliasAnalysis.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/LibCallAliasAnalysis.h Tue Oct 26 19:48:03 2010
@@ -28,18 +28,22 @@
     LibCallInfo *LCI;
     
     explicit LibCallAliasAnalysis(LibCallInfo *LC = 0)
-      : FunctionPass(&ID), LCI(LC) {
+        : FunctionPass(ID), LCI(LC) {
+      initializeLibCallAliasAnalysisPass(*PassRegistry::getPassRegistry());
     }
-    explicit LibCallAliasAnalysis(const void *ID, LibCallInfo *LC)
-      : FunctionPass(ID), LCI(LC) {
+    explicit LibCallAliasAnalysis(char &ID, LibCallInfo *LC)
+        : FunctionPass(ID), LCI(LC) {
+      initializeLibCallAliasAnalysisPass(*PassRegistry::getPassRegistry());
     }
     ~LibCallAliasAnalysis();
     
-    ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size);
+    ModRefResult getModRefInfo(ImmutableCallSite CS,
+                               const Location &Loc);
     
-    ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) {
+    ModRefResult getModRefInfo(ImmutableCallSite CS1,
+                               ImmutableCallSite CS2) {
       // TODO: Could compare two direct calls against each other if we cared to.
-      return AliasAnalysis::getModRefInfo(CS1,CS2);
+      return AliasAnalysis::getModRefInfo(CS1, CS2);
     }
     
     virtual void getAnalysisUsage(AnalysisUsage &AU) const;
@@ -53,15 +57,16 @@
     /// an analysis interface through multiple inheritance.  If needed, it
     /// should override this to adjust the this pointer as needed for the
     /// specified pass info.
-    virtual void *getAdjustedAnalysisPointer(const PassInfo *PI) {
-      if (PI->isPassID(&AliasAnalysis::ID))
+    virtual void *getAdjustedAnalysisPointer(const void *PI) {
+      if (PI == &AliasAnalysis::ID)
         return (AliasAnalysis*)this;
       return this;
     }
     
   private:
     ModRefResult AnalyzeLibCallDetails(const LibCallFunctionInfo *FI,
-                                       CallSite CS, Value *P, unsigned Size);
+                                       ImmutableCallSite CS,
+                                       const Location &Loc);
   };
 }  // End of llvm namespace
 

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/LibCallSemantics.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/LibCallSemantics.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/LibCallSemantics.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/LibCallSemantics.h Tue Oct 26 19:48:03 2010
@@ -47,7 +47,8 @@
     enum LocResult {
       Yes, No, Unknown
     };
-    LocResult (*isLocation)(CallSite CS, const Value *Ptr, unsigned Size);
+    LocResult (*isLocation)(ImmutableCallSite CS,
+                            const AliasAnalysis::Location &Loc);
   };
   
   /// LibCallFunctionInfo - Each record in the array of FunctionInfo structs
@@ -142,7 +143,7 @@
     
     /// getFunctionInfo - Return the LibCallFunctionInfo object corresponding to
     /// the specified function if we have it.  If not, return null.
-    const LibCallFunctionInfo *getFunctionInfo(Function *F) const;
+    const LibCallFunctionInfo *getFunctionInfo(const Function *F) const;
     
     
     //===------------------------------------------------------------------===//

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/LoopDependenceAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/LoopDependenceAnalysis.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/LoopDependenceAnalysis.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/LoopDependenceAnalysis.h Tue Oct 26 19:48:03 2010
@@ -91,7 +91,9 @@
 
 public:
   static char ID; // Class identification, replacement for typeinfo
-  LoopDependenceAnalysis() : LoopPass(&ID) {}
+  LoopDependenceAnalysis() : LoopPass(ID) {
+    initializeLoopDependenceAnalysisPass(*PassRegistry::getPassRegistry());
+  }
 
   /// isDependencePair - Check whether two values can possibly give rise to
   /// a data dependence: that is the case if both are instructions accessing

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/LoopInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/LoopInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/LoopInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/LoopInfo.h Tue Oct 26 19:48:03 2010
@@ -523,10 +523,9 @@
   ///
   bool isLoopInvariant(Value *V) const;
 
-  /// isLoopInvariant - Return true if the specified instruction is
-  /// loop-invariant.
-  ///
-  bool isLoopInvariant(Instruction *I) const;
+  /// hasLoopInvariantOperands - Return true if all the operands of the
+  /// specified instruction are loop invariant. 
+  bool hasLoopInvariantOperands(Instruction *I) const;
 
   /// makeLoopInvariant - If the given value is an instruction inside of the
   /// loop and it can be hoisted, do so to make it trivially loop-invariant.
@@ -940,7 +939,9 @@
 public:
   static char ID; // Pass identification, replacement for typeid
 
-  LoopInfo() : FunctionPass(&ID) {}
+  LoopInfo() : FunctionPass(ID) {
+    initializeLoopInfoPass(*PassRegistry::getPassRegistry());
+  }
 
   LoopInfoBase<BasicBlock, Loop>& getBase() { return LI; }
 

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/LoopPass.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/LoopPass.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/LoopPass.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/LoopPass.h Tue Oct 26 19:48:03 2010
@@ -19,6 +19,7 @@
 #include "llvm/Pass.h"
 #include "llvm/PassManagers.h"
 #include "llvm/Function.h"
+#include <deque>
 
 namespace llvm {
 
@@ -28,8 +29,7 @@
 
 class LoopPass : public Pass {
 public:
-  explicit LoopPass(intptr_t pid) : Pass(PT_Loop, pid) {}
-  explicit LoopPass(void *pid) : Pass(PT_Loop, pid) {}
+  explicit LoopPass(char &pid) : Pass(PT_Loop, pid) {}
 
   /// getPrinterPass - Get a pass to print the function corresponding
   /// to a Loop.
@@ -58,7 +58,7 @@
 
   /// Assign pass manager to manage this pass
   virtual void assignPassManager(PMStack &PMS,
-                                 PassManagerType PMT = PMT_LoopPassManager);
+                                 PassManagerType PMT);
 
   ///  Return what kind of Pass Manager can manage this pass.
   virtual PassManagerType getPotentialPassManagerType() const {
@@ -104,10 +104,10 @@
   /// Print passes managed by this manager
   void dumpPassStructure(unsigned Offset);
 
-  Pass *getContainedPass(unsigned N) {
+  LoopPass *getContainedPass(unsigned N) {
     assert(N < PassVector.size() && "Pass number out of range!");
-    Pass *FP = static_cast<Pass *>(PassVector[N]);
-    return FP;
+    LoopPass *LP = static_cast<LoopPass *>(PassVector[N]);
+    return LP;
   }
 
   virtual PassManagerType getPassManagerType() const {

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/MemoryDependenceAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/MemoryDependenceAnalysis.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/MemoryDependenceAnalysis.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/MemoryDependenceAnalysis.h Tue Oct 26 19:48:03 2010
@@ -17,6 +17,7 @@
 #include "llvm/BasicBlock.h"
 #include "llvm/Pass.h"
 #include "llvm/Support/ValueHandle.h"
+#include "llvm/Analysis/AliasAnalysis.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/OwningPtr.h"
@@ -212,7 +213,7 @@
   private:
     /// ValueIsLoadPair - This is a pair<Value*, bool> where the bool is true if
     /// the dependence is a read only dependence, false if read/write.
-    typedef PointerIntPair<Value*, 1, bool> ValueIsLoadPair;
+    typedef PointerIntPair<const Value*, 1, bool> ValueIsLoadPair;
 
     /// BBSkipFirstBlockPair - This pair is used when caching information for a
     /// block.  If the pointer is null, the cache value is not a full query that
@@ -220,11 +221,25 @@
     /// or not the contents of the block was skipped.
     typedef PointerIntPair<BasicBlock*, 1, bool> BBSkipFirstBlockPair;
 
+    /// NonLocalPointerInfo - This record is the information kept for each
+    /// (value, is load) pair.
+    struct NonLocalPointerInfo {
+      /// Pair - The pair of the block and the skip-first-block flag.
+      BBSkipFirstBlockPair Pair;
+      /// NonLocalDeps - The results of the query for each relevant block.
+      NonLocalDepInfo NonLocalDeps;
+      /// TBAATag - The TBAA tag associated with dereferences of the
+      /// pointer. May be null if there are no tags or conflicting tags.
+      MDNode *TBAATag;
+
+      NonLocalPointerInfo() : TBAATag(0) {}
+    };
+
     /// CachedNonLocalPointerInfo - This map stores the cached results of doing
     /// a pointer lookup at the bottom of a block.  The key of this map is the
     /// pointer+isload bit, the value is a list of <bb->result> mappings.
-    typedef DenseMap<ValueIsLoadPair, std::pair<BBSkipFirstBlockPair, 
-                  NonLocalDepInfo> > CachedNonLocalPointerInfo;
+    typedef DenseMap<ValueIsLoadPair,
+                     NonLocalPointerInfo> CachedNonLocalPointerInfo;
     CachedNonLocalPointerInfo NonLocalPointerDeps;
 
     // A map from instructions to their non-local pointer dependencies.
@@ -297,9 +312,17 @@
     /// set of instructions that either define or clobber the value.
     ///
     /// This method assumes the pointer has a "NonLocal" dependency within BB.
+    void getNonLocalPointerDependency(const AliasAnalysis::Location &Loc,
+                                      bool isLoad, BasicBlock *BB,
+                                    SmallVectorImpl<NonLocalDepResult> &Result);
+
+    /// getNonLocalPointerDependence - A convenience wrapper.
     void getNonLocalPointerDependency(Value *Pointer, bool isLoad,
                                       BasicBlock *BB,
-                                    SmallVectorImpl<NonLocalDepResult> &Result);
+                                    SmallVectorImpl<NonLocalDepResult> &Result){
+      return getNonLocalPointerDependency(AliasAnalysis::Location(Pointer),
+                                          isLoad, BB, Result);
+    }
     
     /// removeInstruction - Remove an instruction from the dependence analysis,
     /// updating the dependence of instructions that previously depended on it.
@@ -319,19 +342,20 @@
     void invalidateCachedPredecessors();
     
   private:
-    MemDepResult getPointerDependencyFrom(Value *Pointer, uint64_t MemSize,
+    MemDepResult getPointerDependencyFrom(const AliasAnalysis::Location &Loc,
                                           bool isLoad, 
                                           BasicBlock::iterator ScanIt,
                                           BasicBlock *BB);
     MemDepResult getCallSiteDependencyFrom(CallSite C, bool isReadOnlyCall,
                                            BasicBlock::iterator ScanIt,
                                            BasicBlock *BB);
-    bool getNonLocalPointerDepFromBB(const PHITransAddr &Pointer, uint64_t Size,
+    bool getNonLocalPointerDepFromBB(const PHITransAddr &Pointer,
+                                     const AliasAnalysis::Location &Loc,
                                      bool isLoad, BasicBlock *BB,
                                      SmallVectorImpl<NonLocalDepResult> &Result,
                                      DenseMap<BasicBlock*, Value*> &Visited,
                                      bool SkipFirstBlock = false);
-    MemDepResult GetNonLocalInfoForBlock(Value *Pointer, uint64_t PointeeSize,
+    MemDepResult GetNonLocalInfoForBlock(const AliasAnalysis::Location &Loc,
                                          bool isLoad, BasicBlock *BB,
                                          NonLocalDepInfo *Cache,
                                          unsigned NumSortedEntries);

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/Passes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/Passes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/Passes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/Passes.h Tue Oct 26 19:48:03 2010
@@ -59,7 +59,7 @@
 
   //===--------------------------------------------------------------------===//
   //
-  // createBasicAliasAnalysisPass - This pass implements the default alias
+  // createBasicAliasAnalysisPass - This pass implements the stateless alias
   // analysis.
   //
   ImmutablePass *createBasicAliasAnalysisPass();
@@ -81,11 +81,18 @@
 
   //===--------------------------------------------------------------------===//
   //
+  // createTypeBasedAliasAnalysisPass - This pass implements metadata-based
+  // type-based alias analysis.
+  //
+  ImmutablePass *createTypeBasedAliasAnalysisPass();
+
+  //===--------------------------------------------------------------------===//
+  //
   // createProfileLoaderPass - This pass loads information from a profile dump
   // file.
   //
   ModulePass *createProfileLoaderPass();
-  extern const PassInfo *ProfileLoaderPassID;
+  extern char &ProfileLoaderPassID;
 
   //===--------------------------------------------------------------------===//
   //
@@ -99,7 +106,7 @@
   // instead of loading it from a previous run.
   //
   FunctionPass *createProfileEstimatorPass();
-  extern const PassInfo *ProfileEstimatorPassID;
+  extern char &ProfileEstimatorPassID;
 
   //===--------------------------------------------------------------------===//
   //
@@ -163,6 +170,13 @@
 
   // Print module-level debug info metadata in human-readable form.
   ModulePass *createModuleDebugInfoPrinterPass();
+
+  //===--------------------------------------------------------------------===//
+  //
+  // createMemDepPrinter - This pass exhaustively collects all memdep
+  // information and prints it with -analyze.
+  //
+  FunctionPass *createMemDepPrinter();
 }
 
 #endif

Removed: llvm/branches/wendling/eh/include/llvm/Analysis/PointerTracking.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/PointerTracking.h?rev=117424&view=auto
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/PointerTracking.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/PointerTracking.h (removed)
@@ -1,131 +0,0 @@
-//===- PointerTracking.h - Pointer Bounds Tracking --------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements tracking of pointer bounds.
-// It knows that the libc functions "calloc" and "realloc" allocate memory, thus
-// you should avoid using this pass if they mean something else for your
-// language.
-//
-// All methods assume that the pointer is not NULL, if it is then the returned
-// allocation size is wrong, and the result from checkLimits is wrong too.
-// It also assumes that pointers are valid, and that it is not analyzing a
-// use-after-free scenario.
-// Due to these limitations the "size" returned by these methods should be
-// considered as either 0 or the returned size.
-//
-// Another analysis pass should be used to find use-after-free/NULL dereference
-// bugs.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_ANALYSIS_POINTERTRACKING_H
-#define LLVM_ANALYSIS_POINTERTRACKING_H
-
-#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/Analysis/Dominators.h"
-#include "llvm/Instructions.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/PredIteratorCache.h"
-
-namespace llvm {
-  class DominatorTree;
-  class ScalarEvolution;
-  class SCEV;
-  class Loop;
-  class LoopInfo;
-  class TargetData;
-
-  // Result from solver, assuming pointer is not NULL,
-  // and it is not a use-after-free situation.
-  enum SolverResult {
-    AlwaysFalse,// always false with above constraints
-    AlwaysTrue,// always true with above constraints
-    Unknown // it can sometimes be true, sometimes false, or it is undecided
-  };
-
-  class PointerTracking : public FunctionPass {
-  public:
-    typedef ICmpInst::Predicate Predicate;
-    static char ID;
-    PointerTracking();
-
-    virtual bool doInitialization(Module &M);
-
-    // If this pointer directly points to an allocation, return
-    // the number of elements of type Ty allocated.
-    // Otherwise return CouldNotCompute.
-    // Since allocations can fail by returning NULL, the real element count
-    // for every allocation is either 0 or the value returned by this function.
-    const SCEV *getAllocationElementCount(Value *P) const;
-
-    // Same as getAllocationSize() but returns size in bytes.
-    // We consider one byte as 8 bits.
-    const SCEV *getAllocationSizeInBytes(Value *V) const;
-
-    // Given a Pointer, determine a base pointer of known size, and an offset
-    // therefrom.
-    // When unable to determine, sets Base to NULL, and Limit/Offset to
-    // CouldNotCompute.
-    // BaseSize, and Offset are in bytes: Pointer == Base + Offset
-    void getPointerOffset(Value *Pointer, Value *&Base, const SCEV *& BaseSize,
-                          const SCEV *&Offset) const;
-
-    // Compares the 2 scalar evolution expressions according to predicate,
-    // and if it can prove that the result is always true or always false
-    // return AlwaysTrue/AlwaysFalse. Otherwise it returns Unknown.
-    enum SolverResult compareSCEV(const SCEV *A, Predicate Pred, const SCEV *B,
-                                  const Loop *L);
-
-    // Determines whether the condition LHS <Pred> RHS is sufficient
-    // for the condition A <Pred> B to hold.
-    // Currently only ULT/ULE is supported.
-    // This errs on the side of returning false.
-    bool conditionSufficient(const SCEV *LHS, Predicate Pred1, const SCEV *RHS,
-                             const SCEV *A, Predicate Pred2, const SCEV *B,
-                             const Loop *L);
-
-    // Determines whether Offset is known to be always in [0, Limit) bounds.
-    // This errs on the side of returning Unknown.
-    enum SolverResult checkLimits(const SCEV *Offset, const SCEV *Limit,
-                                  BasicBlock *BB);
-
-    virtual bool runOnFunction(Function &F);
-    virtual void getAnalysisUsage(AnalysisUsage &AU) const;
-    void print(raw_ostream &OS, const Module* = 0) const;
-  private:
-    Function *FF;
-    TargetData *TD;
-    ScalarEvolution *SE;
-    LoopInfo *LI;
-    DominatorTree *DT;
-
-    Function *callocFunc;
-    Function *reallocFunc;
-    PredIteratorCache predCache;
-
-    SmallPtrSet<const SCEV*, 1> analyzing;
-
-    enum SolverResult isLoopGuardedBy(const Loop *L, Predicate Pred,
-                                      const SCEV *A, const SCEV *B) const;
-    static bool isMonotonic(const SCEV *S);
-    bool scevPositive(const SCEV *A, const Loop *L, bool strict=true) const;
-    bool conditionSufficient(Value *Cond, bool negated,
-                             const SCEV *A, Predicate Pred, const SCEV *B);
-    Value *getConditionToReach(BasicBlock *A,
-                               DomTreeNodeBase<BasicBlock> *B,
-                               bool &negated);
-    Value *getConditionToReach(BasicBlock *A,
-                               BasicBlock *B,
-                               bool &negated);
-    const SCEV *computeAllocationCount(Value *P, const Type *&Ty) const;
-    const SCEV *computeAllocationCountForType(Value *P, const Type *Ty) const;
-  };
-}
-#endif
-

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/PostDominators.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/PostDominators.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/PostDominators.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/PostDominators.h Tue Oct 26 19:48:03 2010
@@ -25,7 +25,8 @@
   static char ID; // Pass identification, replacement for typeid
   DominatorTreeBase<BasicBlock>* DT;
 
-  PostDominatorTree() : FunctionPass(&ID) {
+  PostDominatorTree() : FunctionPass(ID) {
+    initializePostDominatorTreePass(*PassRegistry::getPassRegistry());
     DT = new DominatorTreeBase<BasicBlock>(true);
   }
 
@@ -106,7 +107,9 @@
 struct PostDominanceFrontier : public DominanceFrontierBase {
   static char ID;
   PostDominanceFrontier()
-    : DominanceFrontierBase(&ID, true) {}
+    : DominanceFrontierBase(ID, true) {
+      initializePostDominanceFrontierPass(*PassRegistry::getPassRegistry());
+    }
 
   virtual bool runOnFunction(Function &) {
     Frontiers.clear();

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/RegionInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/RegionInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/RegionInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/RegionInfo.h Tue Oct 26 19:48:03 2010
@@ -58,6 +58,7 @@
   // DO NOT IMPLEMENT
   const RegionNode &operator=(const RegionNode &);
 
+protected:
   /// This is the entry basic block that starts this region node.  If this is a
   /// BasicBlock RegionNode, then entry is just the basic block, that this
   /// RegionNode represents.  Otherwise it is the entry of this (Sub)RegionNode.
@@ -70,7 +71,6 @@
   /// RegionNode.
   PointerIntPair<BasicBlock*, 1, bool> entry;
 
-protected:
   /// @brief The parent Region of this RegionNode.
   /// @see getParent()
   Region* parent;
@@ -257,6 +257,18 @@
   /// @return The entry BasicBlock of the region.
   BasicBlock *getEntry() const { return RegionNode::getEntry(); }
 
+  /// @brief Replace the entry basic block of the region with the new basic
+  ///        block.
+  ///
+  /// @param BB  The new entry basic block of the region.
+  void replaceEntry(BasicBlock *BB);
+
+  /// @brief Replace the exit basic block of the region with the new basic
+  ///        block.
+  ///
+  /// @param BB  The new exit basic block of the region.
+  void replaceExit(BasicBlock *BB);
+
   /// @brief Get the exit BasicBlock of the Region.
   /// @return The exit BasicBlock of the Region, NULL if this is the TopLevel
   ///         Region.
@@ -280,6 +292,19 @@
   /// @return The depth of the region.
   unsigned getDepth() const;
 
+  /// @brief Check if a Region is the TopLevel region.
+  ///
+  /// The toplevel region represents the whole function.
+  bool isTopLevelRegion() const { return exit == NULL; }
+
+  /// @brief Return a new (non canonical) region, that is obtained by joining
+  ///        this region with its predecessors.
+  ///
+  /// @return A region also starting at getEntry(), but reaching to the next
+  ///         basic block that forms with getEntry() a (non canonical) region.
+  ///         NULL if such a basic block does not exist.
+  Region *getExpandedRegion() const;
+
   /// @brief Is this a simple region?
   ///
   /// A region is simple if it has exactly one exit and one entry edge.
@@ -386,7 +411,9 @@
   /// @brief Add a new subregion to this Region.
   ///
   /// @param SubRegion The new subregion that will be added.
-  void addSubRegion(Region *SubRegion);
+  /// @param moveChildren Move the children of this region, that are also
+  ///                     contained in SubRegion into SubRegion.
+  void addSubRegion(Region *SubRegion, bool moveChildren = false);
 
   /// @brief Remove a subregion from this Region.
   ///
@@ -565,6 +592,12 @@
   /// region containing BB.
   Region *getRegionFor(BasicBlock *BB) const;
 
+  /// @brief  Set the smallest region that surrounds a basic block.
+  ///
+  /// @param BB The basic block surrounded by a region.
+  /// @param R The smallest region that surrounds BB.
+  void setRegionFor(BasicBlock *BB, Region *R);
+
   /// @brief A shortcut for getRegionFor().
   ///
   /// @param BB The basic block.
@@ -610,6 +643,12 @@
     return TopLevelRegion;
   }
 
+  /// @brief Update RegionInfo after a basic block was split.
+  ///
+  /// @param NewBB The basic block that was created before OldBB.
+  /// @param OldBB The old basic block.
+  void splitBlock(BasicBlock* NewBB, BasicBlock *OldBB);
+
   /// @brief Clear the Node Cache for all Regions.
   ///
   /// @see Region::clearNodeCache()

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolution.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolution.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolution.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolution.h Tue Oct 26 19:48:03 2010
@@ -45,12 +45,16 @@
   class LoopInfo;
   class Operator;
   class SCEVUnknown;
+  class SCEV;
+  template<> struct FoldingSetTrait<SCEV>;
 
   /// SCEV - This class represents an analyzed expression in the program.  These
   /// are opaque objects that the client is not allowed to do much with
   /// directly.
   ///
   class SCEV : public FoldingSetNode {
+    friend struct FoldingSetTrait<SCEV>;
+
     /// FastID - A reference to an Interned FoldingSetNodeID for this node.
     /// The ScalarEvolution's BumpPtrAllocator holds the data.
     FoldingSetNodeIDRef FastID;
@@ -74,9 +78,6 @@
 
     unsigned getSCEVType() const { return SCEVType; }
 
-    /// Profile - FoldingSet support.
-    void Profile(FoldingSetNodeID& ID) { ID = FastID; }
-
     /// isLoopInvariant - Return true if the value of this SCEV is unchanging in
     /// the specified loop.
     virtual bool isLoopInvariant(const Loop *L) const = 0;
@@ -126,6 +127,21 @@
     void dump() const;
   };
 
+  // Specialize FoldingSetTrait for SCEV to avoid needing to compute
+  // temporary FoldingSetNodeID values.
+  template<> struct FoldingSetTrait<SCEV> : DefaultFoldingSetTrait<SCEV> {
+    static void Profile(const SCEV &X, FoldingSetNodeID& ID) {
+      ID = X.FastID;
+    }
+    static bool Equals(const SCEV &X, const FoldingSetNodeID &ID,
+                       FoldingSetNodeID &TempID) {
+      return ID == X.FastID;
+    }
+    static unsigned ComputeHash(const SCEV &X, FoldingSetNodeID &TempID) {
+      return X.FastID.ComputeHash();
+    }
+  };
+
   inline raw_ostream &operator<<(raw_ostream &OS, const SCEV &S) {
     S.print(OS);
     return OS;
@@ -198,9 +214,14 @@
     /// counts and things.
     SCEVCouldNotCompute CouldNotCompute;
 
-    /// Scalars - This is a cache of the scalars we have analyzed so far.
+    /// ValueExprMapType - The typedef for ValueExprMap.
     ///
-    std::map<SCEVCallbackVH, const SCEV *> Scalars;
+    typedef DenseMap<SCEVCallbackVH, const SCEV *, DenseMapInfo<Value *> >
+      ValueExprMapType;
+
+    /// ValueExprMap - This is a cache of the values we have analyzed so far.
+    ///
+    ValueExprMapType ValueExprMap;
 
     /// BackedgeTakenInfo - Information about the backedge-taken count
     /// of a loop. This currently includes an exact count and a maximum count.
@@ -265,7 +286,7 @@
 
     /// ForgetSymbolicValue - This looks up computed SCEV values for all
     /// instructions that depend on the given instruction and removes them from
-    /// the Scalars map if they reference SymName. This is used during PHI
+    /// the ValueExprMap map if they reference SymName. This is used during PHI
     /// resolution.
     void ForgetSymbolicName(Instruction *I, const SCEV *SymName);
 
@@ -352,10 +373,11 @@
     std::pair<BasicBlock *, BasicBlock *>
     getPredecessorWithUniqueSuccessorForBB(BasicBlock *BB);
 
-    /// isImpliedCond - Test whether the condition described by Pred, LHS,
-    /// and RHS is true whenever the given Cond value evaluates to true.
-    bool isImpliedCond(Value *Cond, ICmpInst::Predicate Pred,
+    /// isImpliedCond - Test whether the condition described by Pred, LHS, and
+    /// RHS is true whenever the given FoundCondValue value evaluates to true.
+    bool isImpliedCond(ICmpInst::Predicate Pred,
                        const SCEV *LHS, const SCEV *RHS,
+                       Value *FoundCondValue,
                        bool Inverse);
 
     /// isImpliedCondOperands - Test whether the condition described by Pred,
@@ -661,6 +683,11 @@
   private:
     FoldingSet<SCEV> UniqueSCEVs;
     BumpPtrAllocator SCEVAllocator;
+
+    /// FirstUnknown - The head of a linked list of all SCEVUnknown
+    /// values that have been allocated. This is used by releaseMemory
+    /// to locate them all and call their destructors.
+    SCEVUnknown *FirstUnknown;
   };
 }
 

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolutionExpressions.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolutionExpressions.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolutionExpressions.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/ScalarEvolutionExpressions.h Tue Oct 26 19:48:03 2010
@@ -202,33 +202,14 @@
     op_iterator op_begin() const { return Operands; }
     op_iterator op_end() const { return Operands + NumOperands; }
 
-    virtual bool isLoopInvariant(const Loop *L) const {
-      for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
-        if (!getOperand(i)->isLoopInvariant(L)) return false;
-      return true;
-    }
+    virtual bool isLoopInvariant(const Loop *L) const;
 
     // hasComputableLoopEvolution - N-ary expressions have computable loop
     // evolutions iff they have at least one operand that varies with the loop,
     // but that all varying operands are computable.
-    virtual bool hasComputableLoopEvolution(const Loop *L) const {
-      bool HasVarying = false;
-      for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
-        if (!getOperand(i)->isLoopInvariant(L)) {
-          if (getOperand(i)->hasComputableLoopEvolution(L))
-            HasVarying = true;
-          else
-            return false;
-        }
-      return HasVarying;
-    }
+    virtual bool hasComputableLoopEvolution(const Loop *L) const;
 
-    virtual bool hasOperand(const SCEV *O) const {
-      for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
-        if (O == getOperand(i) || getOperand(i)->hasOperand(O))
-          return true;
-      return false;
-    }
+    virtual bool hasOperand(const SCEV *O) const;
 
     bool dominates(BasicBlock *BB, DominatorTree *DT) const;
 
@@ -520,18 +501,28 @@
   /// value, and only represent it as its LLVM Value.  This is the "bottom"
   /// value for the analysis.
   ///
-  class SCEVUnknown : public SCEV {
+  class SCEVUnknown : public SCEV, private CallbackVH {
     friend class ScalarEvolution;
-    friend class ScalarEvolution::SCEVCallbackVH;
 
-    // This should be an AssertingVH, however SCEVUnknowns are allocated in a
-    // BumpPtrAllocator so their destructors are never called.
-    Value *V;
-    SCEVUnknown(const FoldingSetNodeIDRef ID, Value *v) :
-      SCEV(ID, scUnknown), V(v) {}
+    // Implement CallbackVH.
+    virtual void deleted();
+    virtual void allUsesReplacedWith(Value *New);
+
+    /// SE - The parent ScalarEvolution value. This is used to update
+    /// the parent's maps when the value associated with a SCEVUnknown
+    /// is deleted or RAUW'd.
+    ScalarEvolution *SE;
+
+    /// Next - The next pointer in the linked list of all
+    /// SCEVUnknown instances owned by a ScalarEvolution.
+    SCEVUnknown *Next;
+
+    SCEVUnknown(const FoldingSetNodeIDRef ID, Value *V,
+                ScalarEvolution *se, SCEVUnknown *next) :
+      SCEV(ID, scUnknown), CallbackVH(V), SE(se), Next(next) {}
 
   public:
-    Value *getValue() const { return V; }
+    Value *getValue() const { return getValPtr(); }
 
     /// isSizeOf, isAlignOf, isOffsetOf - Test whether this is a special
     /// constant representing a type size, alignment, or field offset in

Modified: llvm/branches/wendling/eh/include/llvm/Analysis/ValueTracking.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Analysis/ValueTracking.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Analysis/ValueTracking.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Analysis/ValueTracking.h Tue Oct 26 19:48:03 2010
@@ -77,25 +77,6 @@
   ///
   bool CannotBeNegativeZero(const Value *V, unsigned Depth = 0);
 
-  /// DecomposeGEPExpression - If V is a symbolic pointer expression, decompose
-  /// it into a base pointer with a constant offset and a number of scaled
-  /// symbolic offsets.
-  ///
-  /// The scaled symbolic offsets (represented by pairs of a Value* and a scale
-  /// in the VarIndices vector) are Value*'s that are known to be scaled by the
-  /// specified amount, but which may have other unrepresented high bits. As
-  /// such, the gep cannot necessarily be reconstructed from its decomposed
-  /// form.
-  ///
-  /// When TargetData is around, this function is capable of analyzing
-  /// everything that Value::getUnderlyingObject() can look through.  When not,
-  /// it just looks through pointer casts.
-  ///
-  const Value *DecomposeGEPExpression(const Value *V, int64_t &BaseOffs,
-                 SmallVectorImpl<std::pair<const Value*, int64_t> > &VarIndices,
-                                      const TargetData *TD);
-    
-  
   
   /// FindInsertedValue - Given an aggregrate and an sequence of indices, see if
   /// the scalar value indexed is already around as a register, for example if

Removed: llvm/branches/wendling/eh/include/llvm/Assembly/AsmAnnotationWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Assembly/AsmAnnotationWriter.h?rev=117424&view=auto
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Assembly/AsmAnnotationWriter.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Assembly/AsmAnnotationWriter.h (removed)
@@ -1,58 +0,0 @@
-//===-- AsmAnnotationWriter.h - Itf for annotation .ll files - --*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Clients of the assembly writer can use this interface to add their own
-// special-purpose annotations to LLVM assembly language printouts.  Note that
-// the assembly parser won't be able to parse these, in general, so
-// implementations are advised to print stuff as LLVM comments.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_ASSEMBLY_ASMANNOTATIONWRITER_H
-#define LLVM_ASSEMBLY_ASMANNOTATIONWRITER_H
-
-namespace llvm {
-
-class Function;
-class BasicBlock;
-class Instruction;
-class raw_ostream;
-class formatted_raw_ostream;
-
-class AssemblyAnnotationWriter {
-public:
-
-  virtual ~AssemblyAnnotationWriter();
-
-  /// emitFunctionAnnot - This may be implemented to emit a string right before
-  /// the start of a function.
-  virtual void emitFunctionAnnot(const Function *F, raw_ostream &OS) {}
-
-  /// emitBasicBlockStartAnnot - This may be implemented to emit a string right
-  /// after the basic block label, but before the first instruction in the block.
-  virtual void emitBasicBlockStartAnnot(const BasicBlock *BB, raw_ostream &OS){
-  }
-
-  /// emitBasicBlockEndAnnot - This may be implemented to emit a string right
-  /// after the basic block.
-  virtual void emitBasicBlockEndAnnot(const BasicBlock *BB, raw_ostream &OS){
-  }
-
-  /// emitInstructionAnnot - This may be implemented to emit a string right
-  /// before an instruction is emitted.
-  virtual void emitInstructionAnnot(const Instruction *I, raw_ostream &OS) {}
-
-  /// printInfoComment - This may be implemented to emit a comment to the
-  /// right of an instruction or global value.
-  virtual void printInfoComment(const Value &V, formatted_raw_ostream &OS) {}
-};
-
-} // End llvm namespace
-
-#endif

Modified: llvm/branches/wendling/eh/include/llvm/Attributes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Attributes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Attributes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Attributes.h Tue Oct 26 19:48:03 2010
@@ -65,6 +65,8 @@
                                           ///of alignment with +1 bias
                                           ///0 means unaligned (different from
                                           ///alignstack(1))
+const Attributes Hotpatch    = 1<<29;     ///< Function should have special
+                                          ///'hotpatch' sequence in prologue
 
 /// @brief Attributes that only apply to function parameters.
 const Attributes ParameterOnly = ByVal | Nest | StructRet | NoCapture;
@@ -73,7 +75,8 @@
 /// be used on return values or function parameters.
 const Attributes FunctionOnly = NoReturn | NoUnwind | ReadNone | ReadOnly |
   NoInline | AlwaysInline | OptimizeForSize | StackProtect | StackProtectReq |
-  NoRedZone | NoImplicitFloat | Naked | InlineHint | StackAlignment;
+  NoRedZone | NoImplicitFloat | Naked | InlineHint | StackAlignment |
+  Hotpatch;
 
 /// @brief Parameter attributes that do not apply to vararg call arguments.
 const Attributes VarArgsIncompatible = StructRet;
@@ -223,7 +226,7 @@
   /// paramHasAttr - Return true if the specified parameter index has the
   /// specified attribute set.
   bool paramHasAttr(unsigned Idx, Attributes Attr) const {
-    return getAttributes(Idx) & Attr;
+    return (getAttributes(Idx) & Attr) != 0;
   }
 
   /// getParamAlignment - Return the alignment for the specified function

Modified: llvm/branches/wendling/eh/include/llvm/AutoUpgrade.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/AutoUpgrade.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/AutoUpgrade.h (original)
+++ llvm/branches/wendling/eh/include/llvm/AutoUpgrade.h Tue Oct 26 19:48:03 2010
@@ -16,6 +16,7 @@
 
 namespace llvm {
   class Module;
+  class GlobalVariable;
   class Function;
   class CallInst;
 
@@ -35,6 +36,10 @@
   /// so that it can update all calls to the old function.
   void UpgradeCallsToIntrinsic(Function* F);
 
+  /// This checks for global variables which should be upgraded. It returns true
+  /// if it requires upgrading.
+  bool UpgradeGlobalVariable(GlobalVariable *GV);
+
   /// This function checks debug info intrinsics. If an intrinsic is invalid
   /// then this function simply removes the intrinsic. 
   void CheckDebugInfoIntrinsics(Module *M);

Modified: llvm/branches/wendling/eh/include/llvm/Bitcode/Archive.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Bitcode/Archive.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Bitcode/Archive.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Bitcode/Archive.h Tue Oct 26 19:48:03 2010
@@ -297,7 +297,7 @@
     /// its symbol table without reading in any of the archive's members. This
     /// reduces both I/O and cpu time in opening the archive if it is to be used
     /// solely for symbol lookup (e.g. during linking).  The \p Filename must
-    /// exist and be an archive file or an exception will be thrown. This form
+    /// exist and be an archive file or an error will be returned. This form
     /// of opening the archive is intended for read-only operations that need to
     /// locate members via the symbol table for link editing.  Since the archve
     /// members are not read by this method, the archive will appear empty upon
@@ -306,8 +306,7 @@
     /// if this form of opening the archive is used that only the symbol table
     /// lookup methods (getSymbolTable, findModuleDefiningSymbol, and
     /// findModulesDefiningSymbols) be used.
-    /// @throws std::string if an error occurs opening the file
-    /// @returns an Archive* that represents the archive file.
+    /// @returns an Archive* that represents the archive file, or null on error.
     /// @brief Open an existing archive and load its symbols.
     static Archive* OpenAndLoadSymbols(
       const sys::Path& Filename,   ///< Name of the archive file to open
@@ -319,7 +318,6 @@
     /// closes files. It does nothing with the archive file on disk. If you
     /// haven't used the writeToDisk method by the time the destructor is
     /// called, all changes to the archive will be lost.
-    /// @throws std::string if an error occurs
     /// @brief Destruct in-memory archive
     ~Archive();
 

Modified: llvm/branches/wendling/eh/include/llvm/Bitcode/BitstreamWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Bitcode/BitstreamWriter.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Bitcode/BitstreamWriter.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Bitcode/BitstreamWriter.h Tue Oct 26 19:48:03 2010
@@ -88,7 +88,7 @@
   //===--------------------------------------------------------------------===//
 
   void Emit(uint32_t Val, unsigned NumBits) {
-    assert(NumBits <= 32 && "Invalid value size!");
+    assert(NumBits && NumBits <= 32 && "Invalid value size!");
     assert((Val & ~(~0U >> (32-NumBits))) == 0 && "High bits set!");
     CurValue |= Val << CurBit;
     if (CurBit + NumBits < 32) {
@@ -277,10 +277,12 @@
     switch (Op.getEncoding()) {
     default: assert(0 && "Unknown encoding!");
     case BitCodeAbbrevOp::Fixed:
-      Emit((unsigned)V, (unsigned)Op.getEncodingData());
+      if (Op.getEncodingData())
+        Emit((unsigned)V, (unsigned)Op.getEncodingData());
       break;
     case BitCodeAbbrevOp::VBR:
-      EmitVBR64(V, (unsigned)Op.getEncodingData());
+      if (Op.getEncodingData())
+        EmitVBR64(V, (unsigned)Op.getEncodingData());
       break;
     case BitCodeAbbrevOp::Char6:
       Emit(BitCodeAbbrevOp::EncodeChar6((char)V), 6);

Modified: llvm/branches/wendling/eh/include/llvm/Bitcode/LLVMBitCodes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Bitcode/LLVMBitCodes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Bitcode/LLVMBitCodes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Bitcode/LLVMBitCodes.h Tue Oct 26 19:48:03 2010
@@ -95,7 +95,8 @@
     TYPE_CODE_PPC_FP128= 15,   // PPC LONG DOUBLE (2 doubles)
 
     TYPE_CODE_METADATA = 16,   // METADATA
-    TYPE_CODE_UNION    = 17    // UNION: [eltty x N]
+
+    TYPE_CODE_X86_MMX = 17     // X86 MMX
   };
 
   // The type symbol table only has one code (TST_ENTRY_CODE).
@@ -111,12 +112,20 @@
 
   enum MetadataCodes {
     METADATA_STRING        = 1,   // MDSTRING:      [values]
-    METADATA_NODE          = 2,   // MDNODE:        [n x (type num, value num)]
-    METADATA_FN_NODE       = 3,   // FN_MDNODE:     [n x (type num, value num)]
+    // FIXME: Remove NODE in favor of NODE2 in LLVM 3.0
+    METADATA_NODE          = 2,   // NODE with potentially invalid metadata
+    // FIXME: Remove FN_NODE in favor of FN_NODE2 in LLVM 3.0
+    METADATA_FN_NODE       = 3,   // FN_NODE with potentially invalid metadata
     METADATA_NAME          = 4,   // STRING:        [values]
-    METADATA_NAMED_NODE    = 5,   // NAMEDMDNODE:   [n x mdnodes]
+    // FIXME: Remove NAMED_NODE in favor of NAMED_NODE2 in LLVM 3.0
+    METADATA_NAMED_NODE    = 5,   // NAMED_NODE with potentially invalid metadata
     METADATA_KIND          = 6,   // [n x [id, name]]
-    METADATA_ATTACHMENT    = 7    // [m x [value, [n x [id, mdnode]]]
+    // FIXME: Remove ATTACHMENT in favor of ATTACHMENT2 in LLVM 3.0
+    METADATA_ATTACHMENT    = 7,   // ATTACHMENT with potentially invalid metadata
+    METADATA_NODE2         = 8,   // NODE2:         [n x (type num, value num)]
+    METADATA_FN_NODE2      = 9,   // FN_NODE2:      [n x (type num, value num)]
+    METADATA_NAMED_NODE2   = 10,  // NAMED_NODE2:   [n x mdnodes]
+    METADATA_ATTACHMENT2   = 11   // [m x [value, [n x [id, mdnode]]]
   };
   // The constants block (CONSTANTS_BLOCK_ID) describes emission for each
   // constant and maintains an implicit current type value.
@@ -224,7 +233,8 @@
     FUNC_CODE_INST_LOAD        = 20, // LOAD:       [opty, op, align, vol]
     // FIXME: Remove STORE in favor of STORE2 in LLVM 3.0
     FUNC_CODE_INST_STORE       = 21, // STORE:      [valty,val,ptr, align, vol]
-    FUNC_CODE_INST_CALL        = 22, // CALL:       [attr, fnty, fnid, args...]
+    // FIXME: Remove CALL in favor of CALL2 in LLVM 3.0
+    FUNC_CODE_INST_CALL        = 22, // CALL with potentially invalid metadata
     FUNC_CODE_INST_VAARG       = 23, // VAARG:      [valistty, valist, instty]
     // This store code encodes the pointer type, rather than the value type
     // this is so information only available in the pointer type (e.g. address
@@ -242,8 +252,13 @@
     FUNC_CODE_INST_INBOUNDS_GEP= 30, // INBOUNDS_GEP: [n x operands]
     FUNC_CODE_INST_INDIRECTBR  = 31, // INDIRECTBR: [opty, op0, op1, ...]
     
-    FUNC_CODE_DEBUG_LOC        = 32, // DEBUG_LOC: [Line,Col,ScopeVal, IAVal]
-    FUNC_CODE_DEBUG_LOC_AGAIN  = 33  // DEBUG_LOC_AGAIN
+    // FIXME: Remove DEBUG_LOC in favor of DEBUG_LOC2 in LLVM 3.0
+    FUNC_CODE_DEBUG_LOC        = 32, // DEBUG_LOC with potentially invalid metadata
+    FUNC_CODE_DEBUG_LOC_AGAIN  = 33, // DEBUG_LOC_AGAIN
+
+    FUNC_CODE_INST_CALL2       = 34, // CALL2:      [attr, fnty, fnid, args...]
+
+    FUNC_CODE_DEBUG_LOC2       = 35  // DEBUG_LOC2: [Line,Col,ScopeVal, IAVal]
   };
 } // End bitc namespace
 } // End llvm namespace

Modified: llvm/branches/wendling/eh/include/llvm/Bitcode/ReaderWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Bitcode/ReaderWriter.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Bitcode/ReaderWriter.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Bitcode/ReaderWriter.h Tue Oct 26 19:48:03 2010
@@ -33,6 +33,15 @@
                                LLVMContext& Context,
                                std::string *ErrMsg = 0);
 
+  /// getBitcodeTargetTriple - Read the header of the specified bitcode
+  /// buffer and extract just the triple information. If successful,
+  /// this returns a string and *does not* take ownership
+  /// of 'buffer'. On error, this returns "", and fills in *ErrMsg
+  /// if ErrMsg is non-null.
+  std::string getBitcodeTargetTriple(MemoryBuffer *Buffer,
+                                     LLVMContext& Context,
+                                     std::string *ErrMsg = 0);
+
   /// ParseBitcodeFile - Read the specified bitcode file, returning the module.
   /// If an error occurs, this returns null and fills in *ErrMsg if it is
   /// non-null.  This method *never* takes ownership of Buffer.

Modified: llvm/branches/wendling/eh/include/llvm/CallGraphSCCPass.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CallGraphSCCPass.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CallGraphSCCPass.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CallGraphSCCPass.h Tue Oct 26 19:48:03 2010
@@ -33,8 +33,7 @@
   
 class CallGraphSCCPass : public Pass {
 public:
-  explicit CallGraphSCCPass(intptr_t pid) : Pass(PT_CallGraphSCC, pid) {}
-  explicit CallGraphSCCPass(void *pid) : Pass(PT_CallGraphSCC, pid) {}
+  explicit CallGraphSCCPass(char &pid) : Pass(PT_CallGraphSCC, pid) {}
 
   /// createPrinterPass - Get a pass that prints the Module
   /// corresponding to a CallGraph.
@@ -64,7 +63,7 @@
 
   /// Assign pass manager to manager this pass
   virtual void assignPassManager(PMStack &PMS,
-                                 PassManagerType PMT =PMT_CallGraphPassManager);
+                                 PassManagerType PMT);
 
   ///  Return what kind of Pass Manager can manage this pass.
   virtual PassManagerType getPotentialPassManagerType() const {

Modified: llvm/branches/wendling/eh/include/llvm/CallingConv.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CallingConv.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CallingConv.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CallingConv.h Tue Oct 26 19:48:03 2010
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// This file defines LLVM's set of calling conventions. 
+// This file defines LLVM's set of calling conventions.
 //
 //===----------------------------------------------------------------------===//
 
@@ -20,21 +20,21 @@
 /// the well-known calling conventions.
 ///
 namespace CallingConv {
-  /// A set of enums which specify the assigned numeric values for known llvm 
+  /// A set of enums which specify the assigned numeric values for known llvm
   /// calling conventions.
   /// @brief LLVM Calling Convention Representation
   enum ID {
     /// C - The default llvm calling convention, compatible with C.  This
     /// convention is the only calling convention that supports varargs calls.
-    /// As with typical C calling conventions, the callee/caller have to 
+    /// As with typical C calling conventions, the callee/caller have to
     /// tolerate certain amounts of prototype mismatch.
     C = 0,
-    
+
     // Generic LLVM calling conventions.  None of these calling conventions
     // support varargs calls, and all assume that the caller and callee
     // prototype exactly match.
 
-    /// Fast - This calling convention attempts to make calls as fast as 
+    /// Fast - This calling convention attempts to make calls as fast as
     /// possible (e.g. by passing things in registers).
     Fast = 8,
 
@@ -79,7 +79,15 @@
     /// X86_ThisCall - Similar to X86_StdCall. Passes first argument in ECX,
     /// others via stack. Callee is responsible for stack cleaning. MSVC uses
     /// this by default for methods in its ABI.
-    X86_ThisCall = 70
+    X86_ThisCall = 70,
+
+    /// PTX_Kernel - Call to a PTX kernel.
+    /// Passes all arguments in parameter space.
+    PTX_Kernel = 71,
+
+    /// PTX_Device - Call to a PTX device function.
+    /// Passes all arguments in register or parameter space.
+    PTX_Device = 72
   };
 } // End CallingConv namespace
 

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/Analysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/Analysis.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/Analysis.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/Analysis.h Tue Oct 26 19:48:03 2010
@@ -30,7 +30,7 @@
 /// of insertvalue or extractvalue indices that identify a member, return
 /// the linearized index of the start of the member.
 ///
-unsigned ComputeLinearIndex(const TargetLowering &TLI, const Type *Ty,
+unsigned ComputeLinearIndex(const Type *Ty,
                             const unsigned *Indices,
                             const unsigned *IndicesEnd,
                             unsigned CurIndex = 0);

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/AsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/AsmPrinter.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/AsmPrinter.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/AsmPrinter.h Tue Oct 26 19:48:03 2010
@@ -17,7 +17,7 @@
 #define LLVM_CODEGEN_ASMPRINTER_H
 
 #include "llvm/CodeGen/MachineFunctionPass.h"
-#include "llvm/Support/DebugLoc.h"
+#include "llvm/System/DataTypes.h"
 
 namespace llvm {
   class BlockAddress;
@@ -54,6 +54,7 @@
   class Mangler;
   class TargetLoweringObjectFile;
   class TargetData;
+  class TargetMachine;
   class Twine;
   class Type;
 
@@ -327,6 +328,12 @@
     void EmitLabelOffsetDifference(const MCSymbol *Hi, uint64_t Offset,
                                    const MCSymbol *Lo, unsigned Size) const;
 
+    /// EmitLabelPlusOffset - Emit something like ".long Label+Offset"
+    /// where the size in bytes of the directive is specified by Size and Label
+    /// specifies the label.  This implicitly uses .set if it is available.
+    void EmitLabelPlusOffset(const MCSymbol *Label, uint64_t Offset,
+                                   unsigned Size) const;
+
     //===------------------------------------------------------------------===//
     // Dwarf Emission Helper Routines
     //===------------------------------------------------------------------===//

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/CalcSpillWeights.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/CalcSpillWeights.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/CalcSpillWeights.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/CalcSpillWeights.h Tue Oct 26 19:48:03 2010
@@ -12,10 +12,35 @@
 #define LLVM_CODEGEN_CALCSPILLWEIGHTS_H
 
 #include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/ADT/DenseMap.h"
 
 namespace llvm {
 
   class LiveInterval;
+  class LiveIntervals;
+  class MachineLoopInfo;
+
+  /// VirtRegAuxInfo - Calculate auxiliary information for a virtual
+  /// register such as its spill weight and allocation hint.
+  class VirtRegAuxInfo {
+    MachineFunction &mf_;
+    LiveIntervals &lis_;
+    const MachineLoopInfo &loops_;
+    DenseMap<unsigned, float> hint_;
+  public:
+    VirtRegAuxInfo(MachineFunction &mf, LiveIntervals &lis,
+                   const MachineLoopInfo &loops) :
+      mf_(mf), lis_(lis), loops_(loops) {}
+
+    /// CalculateRegClass - recompute the register class for reg from its uses.
+    /// Since the register class can affect the allocation hint, this function
+    /// should be called before CalculateWeightAndHint if both are called.
+    void CalculateRegClass(unsigned reg);
+
+    /// CalculateWeightAndHint - (re)compute li's spill weight and allocation
+    /// hint.
+    void CalculateWeightAndHint(LiveInterval &li);
+  };
 
   /// CalculateSpillWeights - Compute spill weights for all virtual register
   /// live intervals.
@@ -23,11 +48,13 @@
   public:
     static char ID;
 
-    CalculateSpillWeights() : MachineFunctionPass(&ID) {}
+    CalculateSpillWeights() : MachineFunctionPass(ID) {
+      initializeCalculateSpillWeightsPass(*PassRegistry::getPassRegistry());
+    }
 
     virtual void getAnalysisUsage(AnalysisUsage &au) const;
 
-    virtual bool runOnMachineFunction(MachineFunction &fn);    
+    virtual bool runOnMachineFunction(MachineFunction &fn);
 
   private:
     /// Returns true if the given live interval is zero length.

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/CallingConvLower.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/CallingConvLower.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/CallingConvLower.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/CallingConvLower.h Tue Oct 26 19:48:03 2010
@@ -275,6 +275,12 @@
     return Result;
   }
 
+  /// Version of AllocateStack with extra register to be shadowed.
+  unsigned AllocateStack(unsigned Size, unsigned Align, unsigned ShadowReg) {
+    MarkAllocated(ShadowReg);
+    return AllocateStack(Size, Align);
+  }
+
   // HandleByVal - Allocate a stack slot large enough to pass an argument by
   // value. The size and alignment information of the argument is encoded in its
   // parameter attribute.

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/FastISel.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/FastISel.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/FastISel.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/FastISel.h Tue Oct 26 19:48:03 2010
@@ -39,6 +39,7 @@
 class TargetMachine;
 class TargetRegisterClass;
 class TargetRegisterInfo;
+class LoadInst;
 
 /// FastISel - This is a fast-path instruction selection class that
 /// generates poor code and doesn't support illegal types or non-trivial
@@ -102,7 +103,16 @@
   /// index value.
   std::pair<unsigned, bool> getRegForGEPIndex(const Value *V);
 
-  /// recomputeInsertPt - Reset InsertPt to prepare for insterting instructions
+  /// TryToFoldLoad - The specified machine instr operand is a vreg, and that
+  /// vreg is being provided by the specified load instruction.  If possible,
+  /// try to fold the load as an operand to the instruction, returning true if
+  /// possible.
+  virtual bool TryToFoldLoad(MachineInstr * /*MI*/, unsigned /*OpNo*/,
+                             const LoadInst * /*LI*/) {
+    return false;
+  }
+  
+  /// recomputeInsertPt - Reset InsertPt to prepare for inserting instructions
   /// into the current block.
   void recomputeInsertPt();
 

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/FunctionLoweringInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/FunctionLoweringInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/FunctionLoweringInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/FunctionLoweringInfo.h Tue Oct 26 19:48:03 2010
@@ -77,6 +77,9 @@
   /// anywhere in the function.
   DenseMap<const AllocaInst*, int> StaticAllocaMap;
 
+  /// ByValArgFrameIndexMap - Keep track of frame indices for byval arguments.
+  DenseMap<const Argument*, int> ByValArgFrameIndexMap;
+
   /// ArgDbgValues - A list of DBG_VALUE instructions created during isel for
   /// function arguments that are inserted after scheduling is completed.
   SmallVector<MachineInstr*, 8> ArgDbgValues;
@@ -138,6 +141,13 @@
     assert(R == 0 && "Already initialized this value register!");
     return R = CreateRegs(V->getType());
   }
+
+  /// setByValArgumentFrameIndex - Record frame index for the byval
+  /// argument.
+  void setByValArgumentFrameIndex(const Argument *A, int FI);
+  
+  /// getByValArgumentFrameIndex - Get frame index for the byval argument.
+  int getByValArgumentFrameIndex(const Argument *A);
 };
 
 /// AddCatchInfo - Extract the personality and type infos from an eh.selector

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/GCMetadata.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/GCMetadata.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/GCMetadata.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/GCMetadata.h Tue Oct 26 19:48:03 2010
@@ -36,6 +36,7 @@
 #include "llvm/Pass.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringMap.h"
+#include "llvm/Support/DebugLoc.h"
 
 namespace llvm {
   class AsmPrinter;
@@ -59,8 +60,10 @@
   struct GCPoint {
     GC::PointKind Kind; //< The kind of the safe point.
     MCSymbol *Label;    //< A label.
+    DebugLoc Loc;
 
-    GCPoint(GC::PointKind K, MCSymbol *L) : Kind(K), Label(L) {}
+    GCPoint(GC::PointKind K, MCSymbol *L, DebugLoc DL)
+        : Kind(K), Label(L), Loc(DL) {}
   };
 
   /// GCRoot - Metadata for a pointer to an object managed by the garbage
@@ -121,8 +124,8 @@
     /// addSafePoint - Notes the existence of a safe point. Num is the ID of the
     /// label just prior to the safe point (if the code generator is using
     /// MachineModuleInfo).
-    void addSafePoint(GC::PointKind Kind, MCSymbol *Label) {
-      SafePoints.push_back(GCPoint(Kind, Label));
+    void addSafePoint(GC::PointKind Kind, MCSymbol *Label, DebugLoc DL) {
+      SafePoints.push_back(GCPoint(Kind, Label, DL));
     }
 
     /// getFrameSize/setFrameSize - Records the function's frame size.

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/ISDOpcodes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/ISDOpcodes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/ISDOpcodes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/ISDOpcodes.h Tue Oct 26 19:48:03 2010
@@ -107,6 +107,13 @@
     // and returns an outchain.
     EH_SJLJ_LONGJMP,
 
+    // OUTCHAIN = EH_SJLJ_DISPATCHSETUP(INCHAIN, context)
+    // This corresponds to the eh.sjlj.dispatchsetup intrinsic. It takes an
+    // input chain and a pointer to the sjlj function context as inputs and
+    // returns an outchain. By default, this does nothing. Targets can lower
+    // this to unwind setup code if needed.
+    EH_SJLJ_DISPATCHSETUP,
+
     // TargetConstant* - Like Constant*, but the DAG does not do any folding,
     // simplification, or lowering of the constant. They are used for constants
     // which are known to fit in the immediate fields of their users, or for
@@ -603,7 +610,7 @@
   /// which do not reference a specific memory location should be less than
   /// this value. Those that do must not be less than this value, and can
   /// be used with SelectionDAG::getMemIntrinsicNode.
-  static const int FIRST_TARGET_MEMORY_OPCODE = BUILTIN_OP_END+100;
+  static const int FIRST_TARGET_MEMORY_OPCODE = BUILTIN_OP_END+150;
 
   //===--------------------------------------------------------------------===//
   /// MemIndexedMode enum - This enum defines the load / store indexed
@@ -633,7 +640,6 @@
   ///              (the result of the load and the result of the base +/- offset
   ///              computation); a post-indexed store produces one value (the
   ///              the result of the base +/- offset computation).
-  ///
   enum MemIndexedMode {
     UNINDEXED = 0,
     PRE_INC,
@@ -651,10 +657,8 @@
   ///          integer result type.
   /// ZEXTLOAD loads the integer operand and zero extends it to a larger
   ///          integer result type.
-  /// EXTLOAD  is used for three things: floating point extending loads,
-  ///          integer extending loads [the top bits are undefined], and vector
-  ///          extending loads [load into low elt].
-  ///
+  /// EXTLOAD  is used for two things: floating point extending loads and
+  ///          integer extending loads [the top bits are undefined].
   enum LoadExtType {
     NON_EXTLOAD = 0,
     EXTLOAD,

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/LinkAllCodegenComponents.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/LinkAllCodegenComponents.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/LinkAllCodegenComponents.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/LinkAllCodegenComponents.h Tue Oct 26 19:48:03 2010
@@ -34,8 +34,9 @@
       (void) llvm::createDeadMachineInstructionElimPass();
 
       (void) llvm::createFastRegisterAllocator();
+      (void) llvm::createBasicRegisterAllocator();
       (void) llvm::createLinearScanRegisterAllocator();
-      (void) llvm::createPBQPRegisterAllocator();
+      (void) llvm::createDefaultPBQPRegisterAllocator();
 
       (void) llvm::createSimpleRegisterCoalescer();
       

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/LiveInterval.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/LiveInterval.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/LiveInterval.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/LiveInterval.h Tue Oct 26 19:48:03 2010
@@ -39,32 +39,17 @@
   /// This class holds information about a machine level values, including
   /// definition and use points.
   ///
-  /// Care must be taken in interpreting the def index of the value. The 
-  /// following rules apply:
-  ///
-  /// If the isDefAccurate() method returns false then def does not contain the
-  /// index of the defining MachineInstr, or even (necessarily) to a
-  /// MachineInstr at all. In general such a def index is not meaningful
-  /// and should not be used. The exception is that, for values originally
-  /// defined by PHI instructions, after PHI elimination def will contain the
-  /// index of the MBB in which the PHI originally existed. This can be used
-  /// to insert code (spills or copies) which deals with the value, which will
-  /// be live in to the block.
   class VNInfo {
   private:
     enum {
       HAS_PHI_KILL    = 1,
       REDEF_BY_EC     = 1 << 1,
       IS_PHI_DEF      = 1 << 2,
-      IS_UNUSED       = 1 << 3,
-      IS_DEF_ACCURATE = 1 << 4
+      IS_UNUSED       = 1 << 3
     };
 
+    MachineInstr *copy;
     unsigned char flags;
-    union {
-      MachineInstr *copy;
-      unsigned reg;
-    } cr;
 
   public:
     typedef BumpPtrAllocator Allocator;
@@ -76,20 +61,19 @@
     SlotIndex def;
 
     /// VNInfo constructor.
-    /// d is presumed to point to the actual defining instr. If it doesn't
-    /// setIsDefAccurate(false) should be called after construction.
     VNInfo(unsigned i, SlotIndex d, MachineInstr *c)
-      : flags(IS_DEF_ACCURATE), id(i), def(d) { cr.copy = c; }
+      : copy(c), flags(0), id(i), def(d)
+    { }
 
     /// VNInfo construtor, copies values from orig, except for the value number.
     VNInfo(unsigned i, const VNInfo &orig)
-      : flags(orig.flags), cr(orig.cr), id(i), def(orig.def)
+      : copy(orig.copy), flags(orig.flags), id(i), def(orig.def)
     { }
 
     /// Copy from the parameter into this VNInfo.
     void copyFrom(VNInfo &src) {
       flags = src.flags;
-      cr = src.cr;
+      copy = src.copy;
       def = src.def;
     }
 
@@ -97,23 +81,23 @@
     unsigned getFlags() const { return flags; }
     void setFlags(unsigned flags) { this->flags = flags; }
 
+    /// Merge flags from another VNInfo
+    void mergeFlags(const VNInfo *VNI) {
+      flags = (flags | VNI->flags) & ~IS_UNUSED;
+    }
+
     /// For a register interval, if this VN was definied by a copy instr
     /// getCopy() returns a pointer to it, otherwise returns 0.
     /// For a stack interval the behaviour of this method is undefined.
-    MachineInstr* getCopy() const { return cr.copy; }
+    MachineInstr* getCopy() const { return copy; }
     /// For a register interval, set the copy member.
     /// This method should not be called on stack intervals as it may lead to
     /// undefined behavior.
-    void setCopy(MachineInstr *c) { cr.copy = c; }
+    void setCopy(MachineInstr *c) { copy = c; }
 
-    /// For a stack interval, returns the reg which this stack interval was
-    /// defined from.
-    /// For a register interval the behaviour of this method is undefined. 
-    unsigned getReg() const { return cr.reg; }
-    /// For a stack interval, set the defining register.
-    /// This method should not be called on register intervals as it may lead
-    /// to undefined behaviour.
-    void setReg(unsigned reg) { cr.reg = reg; }
+    /// isDefByCopy - Return true when this value was defined by a copy-like
+    /// instruction as determined by MachineInstr::isCopyLike.
+    bool isDefByCopy() const { return copy != 0; }
 
     /// Returns true if one or more kills are PHI nodes.
     bool hasPHIKill() const { return flags & HAS_PHI_KILL; }
@@ -156,16 +140,6 @@
       else
         flags &= ~IS_UNUSED;
     }
-
-    /// Returns true if the def is accurate.
-    bool isDefAccurate() const { return flags & IS_DEF_ACCURATE; }
-    /// Set the "is def accurate" flag on this value.
-    void setIsDefAccurate(bool defAccurate) {
-      if (defAccurate)
-        flags |= IS_DEF_ACCURATE;
-      else
-        flags &= ~IS_DEF_ACCURATE;
-    }
   };
 
   /// LiveRange structure - This represents a simple register range in the
@@ -189,7 +163,7 @@
     }
 
     /// containsRange - Return true if the given range, [S, E), is covered by
-    /// this range. 
+    /// this range.
     bool containsRange(SlotIndex S, SlotIndex E) const {
       assert((S < E) && "Backwards interval?");
       return (start <= S && S < end) && (start < E && E <= end);
@@ -236,7 +210,7 @@
     float weight;        // weight of this interval
     Ranges ranges;       // the ranges in which this register is live
     VNInfoList valnos;   // value#'s
-    
+
     struct InstrSlots {
       enum {
         LOAD  = 0,
@@ -281,7 +255,20 @@
       while (I->end <= Pos) ++I;
       return I;
     }
-    
+
+    /// find - Return an iterator pointing to the first range that ends after
+    /// Pos, or end(). This is the same as advanceTo(begin(), Pos), but faster
+    /// when searching large intervals.
+    ///
+    /// If Pos is contained in a LiveRange, that range is returned.
+    /// If Pos is in a hole, the following LiveRange is returned.
+    /// If Pos is beyond endIndex, end() is returned.
+    iterator find(SlotIndex Pos);
+
+    const_iterator find(SlotIndex Pos) const {
+      return const_cast<LiveInterval*>(this)->find(Pos);
+    }
+
     void clear() {
       valnos.clear();
       ranges.clear();
@@ -305,7 +292,7 @@
     bool containsOneValue() const { return valnos.size() == 1; }
 
     unsigned getNumValNums() const { return (unsigned)valnos.size(); }
-    
+
     /// getValNumInfo - Returns pointer to the specified val#.
     ///
     inline VNInfo *getValNumInfo(unsigned ValNo) {
@@ -318,10 +305,9 @@
     /// getNextValue - Create a new value number and return it.  MIIdx specifies
     /// the instruction that defines the value number.
     VNInfo *getNextValue(SlotIndex def, MachineInstr *CopyMI,
-                       bool isDefAccurate, VNInfo::Allocator &VNInfoAllocator) {
+                         VNInfo::Allocator &VNInfoAllocator) {
       VNInfo *VNI =
         new (VNInfoAllocator) VNInfo((unsigned)valnos.size(), def, CopyMI);
-      VNI->setIsDefAccurate(isDefAccurate);
       valnos.push_back(VNI);
       return VNI;
     }
@@ -336,6 +322,11 @@
       return VNI;
     }
 
+    /// RenumberValues - Renumber all values in order of appearance and remove
+    /// unused values.
+    /// Recalculate phi-kill flags in case any phi-def values were removed.
+    void RenumberValues(LiveIntervals &lis);
+
     /// isOnlyLROfValNo - Return true if the specified live range is the only
     /// one defined by the its val#.
     bool isOnlyLROfValNo(const LiveRange *LR) {
@@ -346,28 +337,13 @@
       }
       return true;
     }
-    
+
     /// MergeValueNumberInto - This method is called when two value nubmers
     /// are found to be equivalent.  This eliminates V1, replacing all
     /// LiveRanges with the V1 value number with the V2 value number.  This can
     /// cause merging of V1/V2 values numbers and compaction of the value space.
     VNInfo* MergeValueNumberInto(VNInfo *V1, VNInfo *V2);
 
-    /// MergeInClobberRanges - For any live ranges that are not defined in the
-    /// current interval, but are defined in the Clobbers interval, mark them
-    /// used with an unknown definition value. Caller must pass in reference to
-    /// VNInfoAllocator since it will create a new val#.
-    void MergeInClobberRanges(LiveIntervals &li_,
-                              const LiveInterval &Clobbers,
-                              VNInfo::Allocator &VNInfoAllocator);
-
-    /// MergeInClobberRange - Same as MergeInClobberRanges except it merge in a
-    /// single LiveRange only.
-    void MergeInClobberRange(LiveIntervals &li_,
-                             SlotIndex Start,
-                             SlotIndex End,
-                             VNInfo::Allocator &VNInfoAllocator);
-
     /// MergeValueInAsValue - Merge all of the live ranges of a specific val#
     /// in RHS into this live interval as the specified value number.
     /// The LiveRanges in RHS are allowed to overlap with LiveRanges in the
@@ -387,7 +363,7 @@
     /// except for the register of the interval.
     void Copy(const LiveInterval &RHS, MachineRegisterInfo *MRI,
               VNInfo::Allocator &VNInfoAllocator);
-    
+
     bool empty() const { return ranges.empty(); }
 
     /// beginIndex - Return the lowest numbered slot covered by interval.
@@ -407,17 +383,18 @@
       return index >= endIndex();
     }
 
-    bool liveAt(SlotIndex index) const;
-
-    // liveBeforeAndAt - Check if the interval is live at the index and the
-    // index just before it. If index is liveAt, check if it starts a new live
-    // range.If it does, then check if the previous live range ends at index-1.
-    bool liveBeforeAndAt(SlotIndex index) const;
+    bool liveAt(SlotIndex index) const {
+      const_iterator r = find(index);
+      return r != end() && r->start <= index;
+    }
 
     /// killedAt - Return true if a live range ends at index. Note that the kill
     /// point is not contained in the half-open live range. It is usually the
     /// getDefIndex() slot following its last use.
-    bool killedAt(SlotIndex index) const;
+    bool killedAt(SlotIndex index) const {
+      const_iterator r = find(index.getUseIndex());
+      return r != end() && r->end == index;
+    }
 
     /// killedInRange - Return true if the interval has kills in [Start,End).
     /// Note that the kill point is considered the end of a live range, so it is
@@ -447,21 +424,21 @@
 
     /// FindLiveRangeContaining - Return an iterator to the live range that
     /// contains the specified index, or end() if there is none.
-    const_iterator FindLiveRangeContaining(SlotIndex Idx) const;
+    iterator FindLiveRangeContaining(SlotIndex Idx) {
+      iterator I = find(Idx);
+      return I != end() && I->start <= Idx ? I : end();
+    }
 
-    /// FindLiveRangeContaining - Return an iterator to the live range that
-    /// contains the specified index, or end() if there is none.
-    iterator FindLiveRangeContaining(SlotIndex Idx);
+    const_iterator FindLiveRangeContaining(SlotIndex Idx) const {
+      const_iterator I = find(Idx);
+      return I != end() && I->start <= Idx ? I : end();
+    }
 
     /// findDefinedVNInfo - Find the by the specified
-    /// index (register interval) or defined 
+    /// index (register interval) or defined
     VNInfo *findDefinedVNInfoForRegInt(SlotIndex Idx) const;
 
-    /// findDefinedVNInfo - Find the VNInfo that's defined by the specified
-    /// register (stack inteval only).
-    VNInfo *findDefinedVNInfoForStackInt(unsigned Reg) const;
 
-    
     /// overlaps - Return true if the intersection of the two live intervals is
     /// not empty.
     bool overlaps(const LiveInterval& other) const {
@@ -497,7 +474,10 @@
 
     /// isInOneLiveRange - Return true if the range specified is entirely in the
     /// a single LiveRange of the live interval.
-    bool isInOneLiveRange(SlotIndex Start, SlotIndex End);
+    bool isInOneLiveRange(SlotIndex Start, SlotIndex End) const {
+      const_iterator r = find(Start);
+      return r != end() && r->containsRange(Start, End);
+    }
 
     /// removeRange - Remove the specified range from this interval.  Note that
     /// the range must be a single LiveRange in its entirety.
@@ -516,6 +496,15 @@
     ///
     unsigned getSize() const;
 
+    /// Returns true if the live interval is zero length, i.e. no live ranges
+    /// span instructions. It doesn't pay to spill such an interval.
+    bool isZeroLength() const {
+      for (const_iterator i = begin(), e = end(); i != e; ++i)
+        if (i->end.getPrevIndex() > i->start)
+          return false;
+      return true;
+    }
+
     /// isSpillable - Can this interval be spilled?
     bool isSpillable() const {
       return weight != HUGE_VALF;
@@ -555,6 +544,45 @@
     LI.print(OS);
     return OS;
   }
-}
 
+  /// ConnectedVNInfoEqClasses - Helper class that can divide VNInfos in a
+  /// LiveInterval into equivalence clases of connected components. A
+  /// LiveInterval that has multiple connected components can be broken into
+  /// multiple LiveIntervals.
+  ///
+  /// Given a LiveInterval that may have multiple connected components, run:
+  ///
+  ///   unsigned numComps = ConEQ.Classify(LI);
+  ///   if (numComps > 1) {
+  ///     // allocate numComps-1 new LiveIntervals into LIS[1..]
+  ///     ConEQ.Distribute(LIS);
+  /// }
+
+  class ConnectedVNInfoEqClasses {
+    LiveIntervals &lis_;
+
+    // Map each value number to its equivalence class.
+    // The invariant is that EqClass[x] <= x.
+    // Two values are connected iff EqClass[x] == EqClass[b].
+    SmallVector<unsigned, 8> eqClass_;
+
+    // Note that values a and b are connected.
+    void Connect(unsigned a, unsigned b);
+
+    unsigned Renumber();
+
+  public:
+    explicit ConnectedVNInfoEqClasses(LiveIntervals &lis) : lis_(lis) {}
+
+    /// Classify - Classify the values in LI into connected components.
+    /// Return the number of connected components.
+    unsigned Classify(const LiveInterval *LI);
+
+    // Distribute values in LIV[0] into a separate LiveInterval for each connected
+    // component. LIV must have a LiveInterval for each connected component.
+    // The LiveIntervals in Liv[1..] must be empty.
+    void Distribute(LiveInterval *LIV[]);
+  };
+
+}
 #endif

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/LiveIntervalAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/LiveIntervalAnalysis.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/LiveIntervalAnalysis.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/LiveIntervalAnalysis.h Tue Oct 26 19:48:03 2010
@@ -42,7 +42,7 @@
   class TargetInstrInfo;
   class TargetRegisterClass;
   class VirtRegMap;
-  
+
   class LiveIntervals : public MachineFunctionPass {
     MachineFunction* mf_;
     MachineRegisterInfo* mri_;
@@ -68,7 +68,9 @@
 
   public:
     static char ID; // Pass identification, replacement for typeid
-    LiveIntervals() : MachineFunctionPass(&ID) {}
+    LiveIntervals() : MachineFunctionPass(ID) {
+      initializeLiveIntervalsPass(*PassRegistry::getPassRegistry());
+    }
 
     // Calculate the spill weight to assign to a single instruction.
     static float getSpillWeight(bool isDef, bool isUse, unsigned loopDepth);
@@ -105,6 +107,12 @@
       return r2iMap_.count(reg);
     }
 
+    /// isAllocatable - is the physical register reg allocatable in the current
+    /// function?
+    bool isAllocatable(unsigned reg) const {
+      return allocatableRegs_.test(reg);
+    }
+
     /// getScaledIntervalSize - get the size of an interval in "units,"
     /// where every function is composed of one thousand units.  This
     /// measure scales properly with empty index slots in the function.
@@ -117,7 +125,7 @@
     unsigned getFuncInstructionCount() {
       return indexes_->getFunctionSize();
     }
-    
+
     /// getApproximateInstructionCount - computes an estimate of the number
     /// of instructions in a given LiveInterval.
     unsigned getApproximateInstructionCount(LiveInterval& I) {
@@ -149,7 +157,7 @@
     /// dupInterval - Duplicate a live interval. The caller is responsible for
     /// managing the allocated memory.
     LiveInterval *dupInterval(LiveInterval *li);
-    
+
     /// addLiveRangeToEndOfBlock - Given a register and an instruction,
     /// adds a live range from that instruction to the end of its MBB.
     LiveRange addLiveRangeToEndOfBlock(unsigned reg,
@@ -181,7 +189,7 @@
     SlotIndex getInstructionIndex(const MachineInstr *instr) const {
       return indexes_->getInstructionIndex(instr);
     }
-    
+
     /// Returns the instruction associated with the given index.
     MachineInstr* getInstructionFromIndex(SlotIndex index) const {
       return indexes_->getInstructionFromIndex(index);
@@ -190,12 +198,12 @@
     /// Return the first index in the given basic block.
     SlotIndex getMBBStartIdx(const MachineBasicBlock *mbb) const {
       return indexes_->getMBBStartIdx(mbb);
-    } 
+    }
 
     /// Return the last index in the given basic block.
     SlotIndex getMBBEndIdx(const MachineBasicBlock *mbb) const {
       return indexes_->getMBBEndIdx(mbb);
-    } 
+    }
 
     bool isLiveInToMBB(const LiveInterval &li,
                        const MachineBasicBlock *mbb) const {
@@ -221,10 +229,6 @@
       return indexes_->getMBBFromIndex(index);
     }
 
-    SlotIndex getMBBTerminatorGap(const MachineBasicBlock *mbb) {
-      return indexes_->getTerminatorGap(mbb);
-    }
-
     SlotIndex InsertMachineInstrInMaps(MachineInstr *MI) {
       return indexes_->insertMachineInstrInMaps(MI);
     }
@@ -300,7 +304,7 @@
     /// within a single basic block.
     bool intervalIsInOneMBB(const LiveInterval &li) const;
 
-  private:      
+  private:
     /// computeIntervals - Compute live intervals.
     void computeIntervals();
 
@@ -314,7 +318,7 @@
 
     /// isPartialRedef - Return true if the specified def at the specific index
     /// is partially re-defining the specified live interval. A common case of
-    /// this is a definition of the sub-register. 
+    /// this is a definition of the sub-register.
     bool isPartialRedef(SlotIndex MIIdx, MachineOperand &MO,
                         LiveInterval &interval);
 

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/LiveStackAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/LiveStackAnalysis.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/LiveStackAnalysis.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/LiveStackAnalysis.h Tue Oct 26 19:48:03 2010
@@ -39,7 +39,9 @@
     
   public:
     static char ID; // Pass identification, replacement for typeid
-    LiveStacks() : MachineFunctionPass(&ID) {}
+    LiveStacks() : MachineFunctionPass(ID) {
+      initializeLiveStacksPass(*PassRegistry::getPassRegistry());
+    }
 
     typedef SS2IntervalMap::iterator iterator;
     typedef SS2IntervalMap::const_iterator const_iterator;

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/LiveVariables.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/LiveVariables.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/LiveVariables.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/LiveVariables.h Tue Oct 26 19:48:03 2010
@@ -46,7 +46,9 @@
 class LiveVariables : public MachineFunctionPass {
 public:
   static char ID; // Pass identification, replacement for typeid
-  LiveVariables() : MachineFunctionPass(&ID) {}
+  LiveVariables() : MachineFunctionPass(ID) {
+    initializeLiveVariablesPass(*PassRegistry::getPassRegistry());
+  }
 
   /// VarInfo - This represents the regions where a virtual register is live in
   /// the program.  We represent this with three different pieces of

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineBasicBlock.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineBasicBlock.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineBasicBlock.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineBasicBlock.h Tue Oct 26 19:48:03 2010
@@ -23,6 +23,7 @@
 class BasicBlock;
 class MachineFunction;
 class MCSymbol;
+class SlotIndexes;
 class StringRef;
 class raw_ostream;
 
@@ -308,6 +309,9 @@
   template<typename IT>
   void insert(iterator I, IT S, IT E) { Insts.insert(I, S, E); }
   iterator insert(iterator I, MachineInstr *M) { return Insts.insert(I, M); }
+  iterator insertAfter(iterator I, MachineInstr *M) { 
+    return Insts.insertAfter(I, M); 
+  }
 
   // erase - Remove the specified element or range from the instruction list.
   // These functions delete any instructions removed.
@@ -358,7 +362,7 @@
 
   // Debugging methods.
   void dump() const;
-  void print(raw_ostream &OS) const;
+  void print(raw_ostream &OS, SlotIndexes* = 0) const;
 
   /// getNumber - MachineBasicBlocks are uniquely numbered at the function
   /// level, unless they're not in a MachineFunction yet, in which case this

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineDominators.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineDominators.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineDominators.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineDominators.h Tue Oct 26 19:48:03 2010
@@ -145,7 +145,7 @@
   }
   
   /// eraseNode - Removes a node from  the dominator tree. Block must not
-  /// domiante any other blocks. Removes node from its immediate dominator's
+  /// dominate any other blocks. Removes node from its immediate dominator's
   /// children list. Deletes dominator node associated with basic block BB.
   inline void eraseNode(MachineBasicBlock *BB) {
     DT->eraseNode(BB);

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFrameInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFrameInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFrameInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFrameInfo.h Tue Oct 26 19:48:03 2010
@@ -15,6 +15,7 @@
 #define LLVM_CODEGEN_MACHINEFRAMEINFO_H
 
 #include "llvm/ADT/SmallVector.h"
+//#include "llvm/ADT/IndexedMap.h"
 #include "llvm/System/DataTypes.h"
 #include <cassert>
 #include <vector>
@@ -30,15 +31,15 @@
 class BitVector;
 
 /// The CalleeSavedInfo class tracks the information need to locate where a
-/// callee saved register in the current frame.  
+/// callee saved register is in the current frame.
 class CalleeSavedInfo {
   unsigned Reg;
   int FrameIdx;
-  
+
 public:
   explicit CalleeSavedInfo(unsigned R, int FI = 0)
   : Reg(R), FrameIdx(FI) {}
-  
+
   // Accessors.
   unsigned getReg()                        const { return Reg; }
   int getFrameIdx()                        const { return FrameIdx; }
@@ -81,7 +82,7 @@
     // SPOffset - The offset of this object from the stack pointer on entry to
     // the function.  This field has no meaning for a variable sized element.
     int64_t SPOffset;
-    
+
     // The size of this object on the stack. 0 means a variable sized object,
     // ~0ULL means a dead object.
     uint64_t Size;
@@ -103,10 +104,14 @@
     // protector.
     bool MayNeedSP;
 
+    // PreAllocated - If true, the object was mapped into the local frame
+    // block and doesn't need additional handling for allocation beyond that.
+    bool PreAllocated;
+
     StackObject(uint64_t Sz, unsigned Al, int64_t SP, bool IM,
                 bool isSS, bool NSP)
       : SPOffset(SP), Size(Sz), Alignment(Al), isImmutable(IM),
-        isSpillSlot(isSS), MayNeedSP(NSP) {}
+        isSpillSlot(isSS), MayNeedSP(NSP), PreAllocated(false) {}
   };
 
   /// Objects - The list of stack objects allocated...
@@ -138,7 +143,7 @@
   /// to be allocated on entry to the function.
   ///
   uint64_t StackSize;
-  
+
   /// OffsetAdjustment - The amount that a frame offset needs to be adjusted to
   /// have the actual offset from the stack/frame pointer.  The exact usage of
   /// this is target-dependent, but it is typically used to adjust between
@@ -149,10 +154,10 @@
   /// TargetRegisterInfo::getFrameIndexOffset); when generating code, the
   /// corresponding adjustments are performed directly.
   int OffsetAdjustment;
-  
-  /// MaxAlignment - The prolog/epilog code inserter may process objects 
+
+  /// MaxAlignment - The prolog/epilog code inserter may process objects
   /// that require greater alignment than the default alignment the target
-  /// provides. To handle this, MaxAlignment is set to the maximum alignment 
+  /// provides. To handle this, MaxAlignment is set to the maximum alignment
   /// needed by the objects on the current frame.  If this is greater than the
   /// native alignment maintained by the compiler, dynamic alignment code will
   /// be needed.
@@ -177,7 +182,7 @@
   /// insertion.
   ///
   unsigned MaxCallFrameSize;
-  
+
   /// CSInfo - The prolog/epilog code inserter fills in this vector with each
   /// callee saved register saved in the frame.  Beyond its use by the prolog/
   /// epilog code inserter, this data used for debug info and exception
@@ -195,8 +200,24 @@
   ///
   const TargetFrameInfo &TFI;
 
+  /// LocalFrameObjects - References to frame indices which are mapped
+  /// into the local frame allocation block. <FrameIdx, LocalOffset>
+  SmallVector<std::pair<int, int64_t>, 32> LocalFrameObjects;
+
+  /// LocalFrameSize - Size of the pre-allocated local frame block.
+  int64_t LocalFrameSize;
+
+  /// Required alignment of the local object blob, which is the strictest
+  /// alignment of any object in it.
+  unsigned LocalFrameMaxAlign;
+
+  /// Whether the local object blob needs to be allocated together. If not,
+  /// PEI should ignore the isPreAllocated flags on the stack objects and
+  /// just allocate them normally.
+  bool UseLocalStackAllocationBlock;
+
 public:
-  explicit MachineFrameInfo(const TargetFrameInfo &tfi) : TFI(tfi) {
+    explicit MachineFrameInfo(const TargetFrameInfo &tfi) : TFI(tfi) {
     StackSize = NumFixedObjects = OffsetAdjustment = MaxAlignment = 0;
     HasVarSizedObjects = false;
     FrameAddressTaken = false;
@@ -206,6 +227,9 @@
     StackProtectorIdx = -1;
     MaxCallFrameSize = 0;
     CSIValid = false;
+    LocalFrameSize = 0;
+    LocalFrameMaxAlign = 0;
+    UseLocalStackAllocationBlock = false;
   }
 
   /// hasStackObjects - Return true if there are any stack objects in this
@@ -231,8 +255,8 @@
   bool isFrameAddressTaken() const { return FrameAddressTaken; }
   void setFrameAddressIsTaken(bool T) { FrameAddressTaken = T; }
 
-  /// isReturnAddressTaken - This method may be called any time after instruction
-  /// selection is complete to determine if there is a call to
+  /// isReturnAddressTaken - This method may be called any time after
+  /// instruction selection is complete to determine if there is a call to
   /// \@llvm.returnaddress in this function.
   bool isReturnAddressTaken() const { return ReturnAddressTaken; }
   void setReturnAddressIsTaken(bool s) { ReturnAddressTaken = s; }
@@ -245,13 +269,64 @@
   ///
   int getObjectIndexEnd() const { return (int)Objects.size()-NumFixedObjects; }
 
-  /// getNumFixedObjects() - Return the number of fixed objects.
+  /// getNumFixedObjects - Return the number of fixed objects.
   unsigned getNumFixedObjects() const { return NumFixedObjects; }
 
-  /// getNumObjects() - Return the number of objects.
+  /// getNumObjects - Return the number of objects.
   ///
   unsigned getNumObjects() const { return Objects.size(); }
 
+  /// mapLocalFrameObject - Map a frame index into the local object block
+  void mapLocalFrameObject(int ObjectIndex, int64_t Offset) {
+    LocalFrameObjects.push_back(std::pair<int, int64_t>(ObjectIndex, Offset));
+    Objects[ObjectIndex + NumFixedObjects].PreAllocated = true;
+  }
+
+  /// getLocalFrameObjectMap - Get the local offset mapping for a for an object
+  std::pair<int, int64_t> getLocalFrameObjectMap(int i) {
+    assert (i >= 0 && (unsigned)i < LocalFrameObjects.size() &&
+            "Invalid local object reference!");
+    return LocalFrameObjects[i];
+  }
+
+  /// getLocalFrameObjectCount - Return the number of objects allocated into
+  /// the local object block.
+  int64_t getLocalFrameObjectCount() { return LocalFrameObjects.size(); }
+
+  /// setLocalFrameSize - Set the size of the local object blob.
+  void setLocalFrameSize(int64_t sz) { LocalFrameSize = sz; }
+
+  /// getLocalFrameSize - Get the size of the local object blob.
+  int64_t getLocalFrameSize() const { return LocalFrameSize; }
+
+  /// setLocalFrameMaxAlign - Required alignment of the local object blob,
+  /// which is the strictest alignment of any object in it.
+  void setLocalFrameMaxAlign(unsigned Align) { LocalFrameMaxAlign = Align; }
+
+  /// getLocalFrameMaxAlign - Return the required alignment of the local
+  /// object blob.
+  unsigned getLocalFrameMaxAlign() const { return LocalFrameMaxAlign; }
+
+  /// getUseLocalStackAllocationBlock - Get whether the local allocation blob
+  /// should be allocated together or let PEI allocate the locals in it
+  /// directly.
+  bool getUseLocalStackAllocationBlock() {return UseLocalStackAllocationBlock;}
+
+  /// setUseLocalStackAllocationBlock - Set whether the local allocation blob
+  /// should be allocated together or let PEI allocate the locals in it
+  /// directly.
+  void setUseLocalStackAllocationBlock(bool v) {
+    UseLocalStackAllocationBlock = v;
+  }
+
+  /// isObjectPreAllocated - Return true if the object was pre-allocated into
+  /// the local block.
+  bool isObjectPreAllocated(int ObjectIdx) const {
+    assert(unsigned(ObjectIdx+NumFixedObjects) < Objects.size() &&
+           "Invalid Object Idx!");
+    return Objects[ObjectIdx+NumFixedObjects].PreAllocated;
+  }
+
   /// getObjectSize - Return the size of the specified object.
   ///
   int64_t getObjectSize(int ObjectIdx) const {
@@ -321,21 +396,21 @@
   /// setStackSize - Set the size of the stack...
   ///
   void setStackSize(uint64_t Size) { StackSize = Size; }
-  
+
   /// getOffsetAdjustment - Return the correction for frame offsets.
   ///
   int getOffsetAdjustment() const { return OffsetAdjustment; }
-  
+
   /// setOffsetAdjustment - Set the correction for frame offsets.
   ///
   void setOffsetAdjustment(int Adj) { OffsetAdjustment = Adj; }
 
-  /// getMaxAlignment - Return the alignment in bytes that this function must be 
-  /// aligned to, which is greater than the default stack alignment provided by 
+  /// getMaxAlignment - Return the alignment in bytes that this function must be
+  /// aligned to, which is greater than the default stack alignment provided by
   /// the target.
   ///
   unsigned getMaxAlignment() const { return MaxAlignment; }
-  
+
   /// setMaxAlignment - Set the preferred alignment.
   ///
   void setMaxAlignment(unsigned Align) { MaxAlignment = Align; }
@@ -364,8 +439,8 @@
   /// index with a negative value.
   ///
   int CreateFixedObject(uint64_t Size, int64_t SPOffset, bool Immutable);
-  
-  
+
+
   /// isFixedObjectIndex - Returns true if the specified index corresponds to a
   /// fixed stack object.
   bool isFixedObjectIndex(int ObjectIdx) const {

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunction.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunction.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunction.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunction.h Tue Oct 26 19:48:03 2010
@@ -37,6 +37,7 @@
 class Pass;
 class TargetMachine;
 class TargetRegisterClass;
+struct MachinePointerInfo;
 
 template <>
 struct ilist_traits<MachineBasicBlock>
@@ -243,7 +244,7 @@
   /// print - Print out the MachineFunction in a format suitable for debugging
   /// to the specified stream.
   ///
-  void print(raw_ostream &OS) const;
+  void print(raw_ostream &OS, SlotIndexes* = 0) const;
 
   /// viewCFG - This function is meant for use from the debugger.  You can just
   /// say 'call F->viewCFG()' and a ghostview window should pop up from the
@@ -266,7 +267,7 @@
 
   /// verify - Run the current MachineFunction through the machine code
   /// verifier, useful for debugger use.
-  void verify(Pass *p=NULL, bool allowDoubleDefs=false) const;
+  void verify(Pass *p=NULL) const;
 
   // Provide accessors for the MachineBasicBlock list...
   typedef BasicBlockListType::iterator iterator;
@@ -368,10 +369,11 @@
   /// getMachineMemOperand - Allocate a new MachineMemOperand.
   /// MachineMemOperands are owned by the MachineFunction and need not be
   /// explicitly deallocated.
-  MachineMemOperand *getMachineMemOperand(const Value *v, unsigned f,
-                                          int64_t o, uint64_t s,
-                                          unsigned base_alignment);
-
+  MachineMemOperand *getMachineMemOperand(MachinePointerInfo PtrInfo,
+                                          unsigned f, uint64_t s,
+                                          unsigned base_alignment,
+                                          const MDNode *TBAAInfo = 0);
+  
   /// getMachineMemOperand - Allocate a new MachineMemOperand by copying
   /// an existing one, adjusting by an offset and using the given size.
   /// MachineMemOperands are owned by the MachineFunction and need not be

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunctionPass.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunctionPass.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunctionPass.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineFunctionPass.h Tue Oct 26 19:48:03 2010
@@ -31,8 +31,7 @@
 /// override runOnMachineFunction.
 class MachineFunctionPass : public FunctionPass {
 protected:
-  explicit MachineFunctionPass(intptr_t ID) : FunctionPass(ID) {}
-  explicit MachineFunctionPass(void *ID) : FunctionPass(ID) {}
+  explicit MachineFunctionPass(char &ID) : FunctionPass(ID) {}
 
   /// runOnMachineFunction - This method must be overloaded to perform the
   /// desired machine code transformation or analysis.

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstr.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstr.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstr.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstr.h Tue Oct 26 19:48:03 2010
@@ -416,6 +416,10 @@
   ///
   bool allDefsAreDead() const;
 
+  /// copyImplicitOps - Copy implicit register operands from specified
+  /// instruction to this instruction.
+  void copyImplicitOps(const MachineInstr *MI);
+
   //
   // Debugging support
   //

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstrBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstrBuilder.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstrBuilder.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineInstrBuilder.h Tue Oct 26 19:48:03 2010
@@ -18,6 +18,7 @@
 #define LLVM_CODEGEN_MACHINEINSTRBUILDER_H
 
 #include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/Support/ErrorHandling.h"
 
 namespace llvm {
 
@@ -122,6 +123,13 @@
     return *this;
   }
 
+  const MachineInstrBuilder &setMemRefs(MachineInstr::mmo_iterator b,
+                                        MachineInstr::mmo_iterator e) const {
+    MI->setMemRefs(b, e);
+    return *this;
+  }
+
+
   const MachineInstrBuilder &addOperand(const MachineOperand &MO) const {
     MI->addOperand(MO);
     return *this;
@@ -136,6 +144,19 @@
     MI->addOperand(MachineOperand::CreateMCSymbol(Sym));
     return *this;
   }
+
+  // Add a displacement from an existing MachineOperand with an added offset.
+  const MachineInstrBuilder &addDisp(const MachineOperand &Disp,
+                                     int64_t off) const {
+    switch (Disp.getType()) {
+      default:
+        llvm_unreachable("Unhandled operand type in addDisp()");
+      case MachineOperand::MO_Immediate:
+        return addImm(Disp.getImm() + off);
+      case MachineOperand::MO_GlobalAddress:
+        return addGlobalAddress(Disp.getGlobal(), Disp.getOffset() + off);
+    }
+  }
 };
 
 /// BuildMI - Builder interface.  Specify how to create the initial instruction

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineLoopInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineLoopInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineLoopInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineLoopInfo.h Tue Oct 26 19:48:03 2010
@@ -67,7 +67,9 @@
 public:
   static char ID; // Pass identification, replacement for typeid
 
-  MachineLoopInfo() : MachineFunctionPass(&ID) {}
+  MachineLoopInfo() : MachineFunctionPass(ID) {
+    initializeMachineLoopInfoPass(*PassRegistry::getPassRegistry());
+  }
 
   LoopInfoBase<MachineBasicBlock, MachineLoop>& getBase() { return LI; }
 

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineMemOperand.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineMemOperand.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineMemOperand.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineMemOperand.h Tue Oct 26 19:48:03 2010
@@ -24,6 +24,52 @@
 class FoldingSetNodeID;
 class raw_ostream;
 
+/// MachinePointerInfo - This class contains a discriminated union of
+/// information about pointers in memory operands, relating them back to LLVM IR
+/// or to virtual locations (such as frame indices) that are exposed during
+/// codegen.
+struct MachinePointerInfo {
+  /// V - This is the IR pointer value for the access, or it is null if unknown.
+  /// If this is null, then the access is to a pointer in the default address
+  /// space.
+  const Value *V;
+  
+  /// Offset - This is an offset from the base Value*.
+  int64_t Offset;
+  
+  explicit MachinePointerInfo(const Value *v = 0, int64_t offset = 0)
+    : V(v), Offset(offset) {}
+  
+  MachinePointerInfo getWithOffset(int64_t O) const {
+    if (V == 0) return MachinePointerInfo(0, 0);
+    return MachinePointerInfo(V, Offset+O);
+  }
+  
+  /// getAddrSpace - Return the LLVM IR address space number that this pointer
+  /// points into.
+  unsigned getAddrSpace() const;
+  
+  /// getConstantPool - Return a MachinePointerInfo record that refers to the
+  /// constant pool.
+  static MachinePointerInfo getConstantPool();
+
+  /// getFixedStack - Return a MachinePointerInfo record that refers to the
+  /// the specified FrameIndex.
+  static MachinePointerInfo getFixedStack(int FI, int64_t offset = 0);
+  
+  /// getJumpTable - Return a MachinePointerInfo record that refers to a
+  /// jump table entry.
+  static MachinePointerInfo getJumpTable();
+  
+  /// getGOT - Return a MachinePointerInfo record that refers to a
+  /// GOT entry.
+  static MachinePointerInfo getGOT();
+  
+  /// getStack - stack pointer relative access.
+  static MachinePointerInfo getStack(int64_t Offset);
+};
+  
+  
 //===----------------------------------------------------------------------===//
 /// MachineMemOperand - A description of a memory reference used in the backend.
 /// Instead of holding a StoreInst or LoadInst, this class holds the address
@@ -33,10 +79,10 @@
 /// that aren't explicit in the regular LLVM IR.
 ///
 class MachineMemOperand {
-  int64_t Offset;
+  MachinePointerInfo PtrInfo;
   uint64_t Size;
-  const Value *V;
-  unsigned int Flags;
+  unsigned Flags;
+  const MDNode *TBAAInfo;
 
 public:
   /// Flags values. These may be or'd together.
@@ -54,10 +100,12 @@
   };
 
   /// MachineMemOperand - Construct an MachineMemOperand object with the
-  /// specified address Value, flags, offset, size, and base alignment.
-  MachineMemOperand(const Value *v, unsigned int f, int64_t o, uint64_t s,
-                    unsigned int base_alignment);
+  /// specified PtrInfo, flags, size, and base alignment.
+  MachineMemOperand(MachinePointerInfo PtrInfo, unsigned flags, uint64_t s,
+                    unsigned base_alignment, const MDNode *TBAAInfo = 0);
 
+  const MachinePointerInfo &getPointerInfo() const { return PtrInfo; }
+  
   /// getValue - Return the base address of the memory access. This may either
   /// be a normal LLVM IR Value, or one of the special values used in CodeGen.
   /// Special values are those obtained via
@@ -65,7 +113,7 @@
   /// other PseudoSourceValue member functions which return objects which stand
   /// for frame/stack pointer relative references and other special references
   /// which are not representable in the high-level IR.
-  const Value *getValue() const { return V; }
+  const Value *getValue() const { return PtrInfo.V; }
 
   /// getFlags - Return the raw flags of the source value, \see MemOperandFlags.
   unsigned int getFlags() const { return Flags & ((1 << MOMaxBits) - 1); }
@@ -73,7 +121,7 @@
   /// getOffset - For normal values, this is a byte offset added to the base
   /// address. For PseudoSourceValue::FPRel values, this is the FrameIndex
   /// number.
-  int64_t getOffset() const { return Offset; }
+  int64_t getOffset() const { return PtrInfo.Offset; }
 
   /// getSize - Return the size in bytes of the memory reference.
   uint64_t getSize() const { return Size; }
@@ -86,6 +134,9 @@
   /// base address, without the offset.
   uint64_t getBaseAlignment() const { return (1u << (Flags >> MOMaxBits)) >> 1; }
 
+  /// getTBAAInfo - Return the TBAA tag for the memory reference.
+  const MDNode *getTBAAInfo() const { return TBAAInfo; }
+
   bool isLoad() const { return Flags & MOLoad; }
   bool isStore() const { return Flags & MOStore; }
   bool isVolatile() const { return Flags & MOVolatile; }
@@ -99,7 +150,8 @@
   /// setValue - Change the SourceValue for this MachineMemOperand. This
   /// should only be used when an object is being relocated and all references
   /// to it are being updated.
-  void setValue(const Value *NewSV) { V = NewSV; }
+  void setValue(const Value *NewSV) { PtrInfo.V = NewSV; }
+  void setOffset(int64_t NewOffset) { PtrInfo.Offset = NewOffset; }
 
   /// Profile - Gather unique data for the object.
   ///

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineModuleInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineModuleInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineModuleInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineModuleInfo.h Tue Oct 26 19:48:03 2010
@@ -58,7 +58,7 @@
 class Module;
 class PointerType;
 class StructType;
-  
+
 //===----------------------------------------------------------------------===//
 /// MachineModuleInfoImpl - This class can be derived from and used by targets
 /// to hold private target-specific information for each Module.  Objects of
@@ -73,6 +73,8 @@
   static SymbolListTy GetSortedStubs(const DenseMap<MCSymbol*, StubValueTy>&);
 };
 
+
+
 //===----------------------------------------------------------------------===//
 /// LandingPadInfo - This structure is used to retain landing pad info for
 /// the current function.
@@ -89,18 +91,20 @@
     : LandingPadBlock(MBB), LandingPadLabel(0), Personality(0) {}
 };
 
+class MMIAddrLabelMap;
+
 //===----------------------------------------------------------------------===//
 /// MachineModuleInfo - This class contains meta information specific to a
-/// module.  Queries can be made by different debugging and exception handling 
+/// module.  Queries can be made by different debugging and exception handling
 /// schemes and reformated for specific use.
 ///
 class MachineModuleInfo : public ImmutablePass {
   /// Context - This is the MCContext used for the entire code generator.
   MCContext Context;
-  
+
   /// TheModule - This is the LLVM Module being worked on.
   const Module *TheModule;
-  
+
   /// ObjFileMMI - This is the object-file-format-specific implementation of
   /// MachineModuleInfoImpl, which lets targets accumulate whatever info they
   /// want.
@@ -109,7 +113,7 @@
   // FrameMoves - List of moves done by a function's prolog.  Used to construct
   // frame maps by debug and exception handling consumers.
   std::vector<MachineMove> FrameMoves;
-  
+
   // LandingPads - List of LandingPadInfo describing the landing pad information
   // in the current function.
   std::vector<LandingPadInfo> LandingPads;
@@ -146,7 +150,7 @@
   /// AddrLabelSymbols - This map keeps track of which symbol is being used for
   /// the specified basic block's address of label.
   MMIAddrLabelMap *AddrLabelSymbols;
-  
+
   bool CallsEHReturn;
   bool CallsUnwindInit;
 
@@ -172,6 +176,10 @@
   /// in this module.
   bool DbgInfoAvailable;
 
+  /// True if this module calls VarArg function with floating point arguments.
+  /// This is used to emit an undefined reference to fltused on Windows targets.
+  bool CallsExternalVAFunctionWithFloatingPointArguments;
+
 public:
   static char ID; // Pass identification, replacement for typeid
 
@@ -183,20 +191,20 @@
   MachineModuleInfo();  // DUMMY CONSTRUCTOR, DO NOT CALL.
   MachineModuleInfo(const MCAsmInfo &MAI);  // Real constructor.
   ~MachineModuleInfo();
-  
+
   bool doInitialization();
   bool doFinalization();
 
   /// EndFunction - Discard function meta information.
   ///
   void EndFunction();
-  
+
   const MCContext &getContext() const { return Context; }
   MCContext &getContext() { return Context; }
 
   void setModule(const Module *M) { TheModule = M; }
   const Module *getModule() const { return TheModule; }
-  
+
   /// getInfo - Keep track of various per-function pieces of information for
   /// backends that would like to do so.
   ///
@@ -206,16 +214,16 @@
       ObjFileMMI = new Ty(*this);
     return *static_cast<Ty*>(ObjFileMMI);
   }
-  
+
   template<typename Ty>
   const Ty &getObjFileInfo() const {
     return const_cast<MachineModuleInfo*>(this)->getObjFileInfo<Ty>();
   }
-  
+
   /// AnalyzeModule - Scan the module for global debug information.
   ///
   void AnalyzeModule(const Module &M);
-  
+
   /// hasDebugInfo - Returns true if valid debug info is present.
   ///
   bool hasDebugInfo() const { return DbgInfoAvailable; }
@@ -226,12 +234,20 @@
 
   bool callsUnwindInit() const { return CallsUnwindInit; }
   void setCallsUnwindInit(bool b) { CallsUnwindInit = b; }
-  
+
+  bool callsExternalVAFunctionWithFloatingPointArguments() const {
+    return CallsExternalVAFunctionWithFloatingPointArguments;
+  }
+
+  void setCallsExternalVAFunctionWithFloatingPointArguments(bool b) {
+    CallsExternalVAFunctionWithFloatingPointArguments = b;
+  }
+
   /// getFrameMoves - Returns a reference to a list of moves done in the current
   /// function's prologue.  Used to construct frame maps for debug and exception
   /// handling comsumers.
   std::vector<MachineMove> &getFrameMoves() { return FrameMoves; }
-  
+
   /// getAddrLabelSymbol - Return the symbol to be used for the specified basic
   /// block when its address is taken.  This cannot be its normal LBB label
   /// because the block may be accessed outside its containing function.
@@ -241,15 +257,15 @@
   /// basic block when its address is taken.  If other blocks were RAUW'd to
   /// this one, we may have to emit them as well, return the whole set.
   std::vector<MCSymbol*> getAddrLabelSymbolToEmit(const BasicBlock *BB);
-  
+
   /// takeDeletedSymbolsForFunction - If the specified function has had any
   /// references to address-taken blocks generated, but the block got deleted,
   /// return the symbol now so we can emit it.  This prevents emitting a
   /// reference to a symbol that has no definition.
-  void takeDeletedSymbolsForFunction(const Function *F, 
+  void takeDeletedSymbolsForFunction(const Function *F,
                                      std::vector<MCSymbol*> &Result);
 
-  
+
   //===- EH ---------------------------------------------------------------===//
 private:
   /// getOrCreateLandingPadInfo - Find or create an LandingPadInfo for the
@@ -260,8 +276,8 @@
   /// associate it with a try landing pad block.
   void addInvoke(MachineBasicBlock *LandingPad,
                  MCSymbol *BeginLabel, MCSymbol *EndLabel);
-  
-  /// addLandingPad - Add a new panding pad.  Returns the label ID for the 
+
+  /// addLandingPad - Add a new panding pad.  Returns the label ID for the
   /// landing pad entry.
   MCSymbol *addLandingPad(MachineBasicBlock *LandingPad);
 
@@ -307,7 +323,7 @@
   ///
   void addCleanup(MachineBasicBlock *LandingPad);
 
-  /// getTypeIDFor - Return the type id for the specified typeinfo.  This is 
+  /// getTypeIDFor - Return the type id for the specified typeinfo.  This is
   /// function wide.
   unsigned getTypeIDFor(const GlobalVariable *TI);
 
@@ -318,7 +334,7 @@
   /// TidyLandingPads - Remap landing pad labels and remove any deleted landing
   /// pads.
   void TidyLandingPads(DenseMap<MCSymbol*, uintptr_t> *LPMap = 0);
-                        
+
   /// getLandingPads - Return a reference to the landing pad info for the
   /// current function.
   const std::vector<LandingPadInfo> &getLandingPads() const {

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineOperand.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineOperand.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineOperand.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineOperand.h Tue Oct 26 19:48:03 2010
@@ -18,7 +18,7 @@
 #include <cassert>
 
 namespace llvm {
-  
+
 class BlockAddress;
 class ConstantFP;
 class GlobalValue;
@@ -30,7 +30,7 @@
 class TargetRegisterInfo;
 class raw_ostream;
 class MCSymbol;
-  
+
 /// MachineOperand class - Representation of each machine instruction operand.
 ///
 class MachineOperand {
@@ -54,21 +54,21 @@
   /// OpKind - Specify what kind of operand this is.  This discriminates the
   /// union.
   unsigned char OpKind; // MachineOperandType
-  
+
   /// SubReg - Subregister number, only valid for MO_Register.  A value of 0
   /// indicates the MO_Register has no subReg.
   unsigned char SubReg;
-  
+
   /// TargetFlags - This is a set of target-specific operand flags.
   unsigned char TargetFlags;
-  
+
   /// IsDef/IsImp/IsKill/IsDead flags - These are only valid for MO_Register
   /// operands.
-  
+
   /// IsDef - True if this is a def, false if this is a use of the register.
   ///
   bool IsDef : 1;
-  
+
   /// IsImp - True if this is an implicit def or use, false if it is explicit.
   ///
   bool IsImp : 1;
@@ -94,7 +94,16 @@
   /// not a real instruction.  Such uses should be ignored during codegen.
   bool IsDebug : 1;
 
-  /// ParentMI - This is the instruction that this operand is embedded into. 
+  /// SmallContents - Thisreally should be part of the Contents union, but lives
+  /// out here so we can get a better packed struct.
+  /// MO_Register: Register number.
+  /// OffsetedInfo: Low bits of offset.
+  union {
+    unsigned RegNo;           // For MO_Register.
+    unsigned OffsetLo;        // Matches Contents.OffsetedInfo.OffsetHi.
+  } SmallContents;
+
+  /// ParentMI - This is the instruction that this operand is embedded into.
   /// This is valid for all operand types, when the operand is in an instr.
   MachineInstr *ParentMI;
 
@@ -107,11 +116,11 @@
     MCSymbol *Sym;            // For MO_MCSymbol
 
     struct {                  // For MO_Register.
-      unsigned RegNo;
+      // Register number is in SmallContents.RegNo.
       MachineOperand **Prev;  // Access list for register.
       MachineOperand *Next;
     } Reg;
-    
+
     /// OffsetedInfo - This struct contains the offset and an object identifier.
     /// this represent the object as with an optional offset from it.
     struct {
@@ -121,10 +130,11 @@
         const GlobalValue *GV;    // For MO_GlobalAddress.
         const BlockAddress *BA;   // For MO_BlockAddress.
       } Val;
-      int64_t Offset;             // An offset from the object.
+      // Low bits of offset are in SmallContents.OffsetLo.
+      int OffsetHi;               // An offset from the object, high 32 bits.
     } OffsetedInfo;
   } Contents;
-  
+
   explicit MachineOperand(MachineOperandType K) : OpKind(K), ParentMI(0) {
     TargetFlags = 0;
   }
@@ -132,17 +142,17 @@
   /// getType - Returns the MachineOperandType for this operand.
   ///
   MachineOperandType getType() const { return (MachineOperandType)OpKind; }
-  
+
   unsigned char getTargetFlags() const { return TargetFlags; }
   void setTargetFlags(unsigned char F) { TargetFlags = F; }
   void addTargetFlag(unsigned char F) { TargetFlags |= F; }
-  
+
 
   /// getParent - Return the instruction that this operand belongs to.
   ///
   MachineInstr *getParent() { return ParentMI; }
   const MachineInstr *getParent() const { return ParentMI; }
-  
+
   void print(raw_ostream &os, const TargetMachine *TM = 0) const;
 
   //===--------------------------------------------------------------------===//
@@ -180,44 +190,44 @@
   /// getReg - Returns the register number.
   unsigned getReg() const {
     assert(isReg() && "This is not a register operand!");
-    return Contents.Reg.RegNo;
+    return SmallContents.RegNo;
   }
-  
+
   unsigned getSubReg() const {
     assert(isReg() && "Wrong MachineOperand accessor");
     return (unsigned)SubReg;
   }
-  
-  bool isUse() const { 
+
+  bool isUse() const {
     assert(isReg() && "Wrong MachineOperand accessor");
     return !IsDef;
   }
-  
+
   bool isDef() const {
     assert(isReg() && "Wrong MachineOperand accessor");
     return IsDef;
   }
-  
-  bool isImplicit() const { 
+
+  bool isImplicit() const {
     assert(isReg() && "Wrong MachineOperand accessor");
     return IsImp;
   }
-  
+
   bool isDead() const {
     assert(isReg() && "Wrong MachineOperand accessor");
     return IsDead;
   }
-  
+
   bool isKill() const {
     assert(isReg() && "Wrong MachineOperand accessor");
     return IsKill;
   }
-  
+
   bool isUndef() const {
     assert(isReg() && "Wrong MachineOperand accessor");
     return IsUndef;
   }
-  
+
   bool isEarlyClobber() const {
     assert(isReg() && "Wrong MachineOperand accessor");
     return IsEarlyClobber;
@@ -238,11 +248,11 @@
   //===--------------------------------------------------------------------===//
   // Mutators for Register Operands
   //===--------------------------------------------------------------------===//
-  
+
   /// Change the register this operand corresponds to.
   ///
   void setReg(unsigned Reg);
-  
+
   void setSubReg(unsigned subReg) {
     assert(isReg() && "Wrong MachineOperand accessor");
     SubReg = (unsigned char)subReg;
@@ -266,14 +276,14 @@
     assert((Val || !isDebug()) && "Marking a debug operation as def");
     IsDef = !Val;
   }
-  
+
   void setIsDef(bool Val = true) {
     assert(isReg() && "Wrong MachineOperand accessor");
     assert((!Val || !isDebug()) && "Marking a debug operation as def");
     IsDef = Val;
   }
 
-  void setImplicit(bool Val = true) { 
+  void setImplicit(bool Val = true) {
     assert(isReg() && "Wrong MachineOperand accessor");
     IsImp = Val;
   }
@@ -283,7 +293,7 @@
     assert((!Val || !isDebug()) && "Marking a debug operation as kill");
     IsKill = Val;
   }
-  
+
   void setIsDead(bool Val = true) {
     assert(isReg() && IsDef && "Wrong MachineOperand accessor");
     IsDead = Val;
@@ -293,7 +303,7 @@
     assert(isReg() && "Wrong MachineOperand accessor");
     IsUndef = Val;
   }
-  
+
   void setIsEarlyClobber(bool Val = true) {
     assert(isReg() && IsDef && "Wrong MachineOperand accessor");
     IsEarlyClobber = Val;
@@ -307,17 +317,17 @@
   //===--------------------------------------------------------------------===//
   // Accessors for various operand types.
   //===--------------------------------------------------------------------===//
-  
+
   int64_t getImm() const {
     assert(isImm() && "Wrong MachineOperand accessor");
     return Contents.ImmVal;
   }
-  
+
   const ConstantFP *getFPImm() const {
     assert(isFPImm() && "Wrong MachineOperand accessor");
     return Contents.CFP;
   }
-  
+
   MachineBasicBlock *getMBB() const {
     assert(isMBB() && "Wrong MachineOperand accessor");
     return Contents.MBB;
@@ -328,7 +338,7 @@
            "Wrong MachineOperand accessor");
     return Contents.OffsetedInfo.Val.Index;
   }
-  
+
   const GlobalValue *getGlobal() const {
     assert(isGlobal() && "Wrong MachineOperand accessor");
     return Contents.OffsetedInfo.Val.GV;
@@ -343,15 +353,16 @@
     assert(isMCSymbol() && "Wrong MachineOperand accessor");
     return Contents.Sym;
   }
-  
+
   /// getOffset - Return the offset from the symbol in this operand. This always
   /// returns 0 for ExternalSymbol operands.
   int64_t getOffset() const {
     assert((isGlobal() || isSymbol() || isCPI() || isBlockAddress()) &&
            "Wrong MachineOperand accessor");
-    return Contents.OffsetedInfo.Offset;
+    return (int64_t(Contents.OffsetedInfo.OffsetHi) << 32) |
+           SmallContents.OffsetLo;
   }
-  
+
   const char *getSymbolName() const {
     assert(isSymbol() && "Wrong MachineOperand accessor");
     return Contents.OffsetedInfo.Val.SymbolName;
@@ -361,11 +372,11 @@
     assert(isMetadata() && "Wrong MachineOperand accessor");
     return Contents.MD;
   }
-  
+
   //===--------------------------------------------------------------------===//
   // Mutators for various operand types.
   //===--------------------------------------------------------------------===//
-  
+
   void setImm(int64_t immVal) {
     assert(isImm() && "Wrong MachineOperand mutator");
     Contents.ImmVal = immVal;
@@ -374,56 +385,57 @@
   void setOffset(int64_t Offset) {
     assert((isGlobal() || isSymbol() || isCPI() || isBlockAddress()) &&
         "Wrong MachineOperand accessor");
-    Contents.OffsetedInfo.Offset = Offset;
+    SmallContents.OffsetLo = unsigned(Offset);
+    Contents.OffsetedInfo.OffsetHi = int(Offset >> 32);
   }
-  
+
   void setIndex(int Idx) {
     assert((isFI() || isCPI() || isJTI()) &&
            "Wrong MachineOperand accessor");
     Contents.OffsetedInfo.Val.Index = Idx;
   }
-  
+
   void setMBB(MachineBasicBlock *MBB) {
     assert(isMBB() && "Wrong MachineOperand accessor");
     Contents.MBB = MBB;
   }
-  
+
   //===--------------------------------------------------------------------===//
   // Other methods.
   //===--------------------------------------------------------------------===//
-  
+
   /// isIdenticalTo - Return true if this operand is identical to the specified
   /// operand. Note: This method ignores isKill and isDead properties.
   bool isIdenticalTo(const MachineOperand &Other) const;
-  
+
   /// ChangeToImmediate - Replace this operand with a new immediate operand of
   /// the specified value.  If an operand is known to be an immediate already,
   /// the setImm method should be used.
   void ChangeToImmediate(int64_t ImmVal);
-  
+
   /// ChangeToRegister - Replace this operand with a new register operand of
   /// the specified value.  If an operand is known to be an register already,
   /// the setReg method should be used.
   void ChangeToRegister(unsigned Reg, bool isDef, bool isImp = false,
                         bool isKill = false, bool isDead = false,
                         bool isUndef = false, bool isDebug = false);
-  
+
   //===--------------------------------------------------------------------===//
   // Construction methods.
   //===--------------------------------------------------------------------===//
-  
+
   static MachineOperand CreateImm(int64_t Val) {
     MachineOperand Op(MachineOperand::MO_Immediate);
     Op.setImm(Val);
     return Op;
   }
-  
+
   static MachineOperand CreateFPImm(const ConstantFP *CFP) {
     MachineOperand Op(MachineOperand::MO_FPImmediate);
     Op.Contents.CFP = CFP;
     return Op;
   }
-  
+
   static MachineOperand CreateReg(unsigned Reg, bool isDef, bool isImp = false,
                                   bool isKill = false, bool isDead = false,
                                   bool isUndef = false,
@@ -438,7 +450,7 @@
     Op.IsUndef = isUndef;
     Op.IsEarlyClobber = isEarlyClobber;
     Op.IsDebug = isDebug;
-    Op.Contents.Reg.RegNo = Reg;
+    Op.SmallContents.RegNo = Reg;
     Op.Contents.Reg.Prev = 0;
     Op.Contents.Reg.Next = 0;
     Op.SubReg = SubReg;
@@ -506,7 +518,7 @@
     Op.Contents.Sym = Sym;
     return Op;
   }
-  
+
   friend class MachineInstr;
   friend class MachineRegisterInfo;
 private:
@@ -521,7 +533,7 @@
     assert(isReg() && "Can only add reg operand to use lists");
     return Contents.Reg.Prev != 0;
   }
-  
+
   /// AddRegOperandToRegInfo - Add this register operand to the specified
   /// MachineRegisterInfo.  If it is null, then the next/prev fields should be
   /// explicitly nulled out.

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/MachineRegisterInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/MachineRegisterInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/MachineRegisterInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/MachineRegisterInfo.h Tue Oct 26 19:48:03 2010
@@ -203,6 +203,14 @@
   ///
   void setRegClass(unsigned Reg, const TargetRegisterClass *RC);
 
+  /// constrainRegClass - Constrain the register class of the specified virtual
+  /// register to be a common subclass of RC and the current register class.
+  /// Return the new register class, or NULL if no such class exists.
+  /// This should only be used when the constraint is known to be trivial, like
+  /// GR32 -> GR32_NOSP. Beware of increasing register pressure.
+  const TargetRegisterClass *constrainRegClass(unsigned Reg,
+                                               const TargetRegisterClass *RC);
+
   /// createVirtualRegister - Create and return a new virtual register in the
   /// function with the specified register class.
   ///

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/Passes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/Passes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/Passes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/Passes.h Tue Oct 26 19:48:03 2010
@@ -30,55 +30,58 @@
   /// createUnreachableBlockEliminationPass - The LLVM code generator does not
   /// work well with unreachable basic blocks (what live ranges make sense for a
   /// block that cannot be reached?).  As such, a code generator should either
-  /// not instruction select unreachable blocks, or it can run this pass as it's
+  /// not instruction select unreachable blocks, or run this pass as its
   /// last LLVM modifying pass to clean up blocks that are not reachable from
   /// the entry block.
   FunctionPass *createUnreachableBlockEliminationPass();
 
   /// MachineFunctionPrinter pass - This pass prints out the machine function to
-  /// the given stream, as a debugging tool.
+  /// the given stream as a debugging tool.
   MachineFunctionPass *
   createMachineFunctionPrinterPass(raw_ostream &OS,
                                    const std::string &Banner ="");
 
   /// MachineLoopInfo pass - This pass is a loop analysis pass.
-  /// 
-  extern const PassInfo *const MachineLoopInfoID;
+  ///
+  extern char &MachineLoopInfoID;
 
   /// MachineDominators pass - This pass is a machine dominators analysis pass.
-  /// 
-  extern const PassInfo *const MachineDominatorsID;
+  ///
+  extern char &MachineDominatorsID;
 
   /// PHIElimination pass - This pass eliminates machine instruction PHI nodes
   /// by inserting copy instructions.  This destroys SSA information, but is the
   /// desired input for some register allocators.  This pass is "required" by
   /// these register allocator like this: AU.addRequiredID(PHIEliminationID);
   ///
-  extern const PassInfo *const PHIEliminationID;
-  
+  extern char &PHIEliminationID;
+
   /// StrongPHIElimination pass - This pass eliminates machine instruction PHI
   /// nodes by inserting copy instructions.  This destroys SSA information, but
   /// is the desired input for some register allocators.  This pass is
   /// "required" by these register allocator like this:
   ///    AU.addRequiredID(PHIEliminationID);
   ///  This pass is still in development
-  extern const PassInfo *const StrongPHIEliminationID;
+  extern char &StrongPHIEliminationID;
+
+  extern char &PreAllocSplittingID;
 
-  extern const PassInfo *const PreAllocSplittingID;
+  /// LiveStacks pass. An analysis keeping track of the liveness of stack slots.
+  extern char &LiveStacksID;
 
   /// SimpleRegisterCoalescing pass.  Aggressively coalesces every register
   /// copy it can.
   ///
-  extern const PassInfo *const SimpleRegisterCoalescingID;
+  extern char &SimpleRegisterCoalescingID;
 
   /// TwoAddressInstruction pass - This pass reduces two-address instructions to
   /// use two operands. This destroys SSA information but it is desired by
   /// register allocators.
-  extern const PassInfo *const TwoAddressInstructionPassID;
+  extern char &TwoAddressInstructionPassID;
 
   /// UnreachableMachineBlockElimination pass - This pass removes unreachable
   /// machine basic blocks.
-  extern const PassInfo *const UnreachableMachineBlockElimID;
+  extern char &UnreachableMachineBlockElimID;
 
   /// DeadMachineInstructionElim pass - This pass removes dead machine
   /// instructions.
@@ -95,6 +98,11 @@
   ///
   FunctionPass *createFastRegisterAllocator();
 
+  /// BasicRegisterAllocation Pass - This pass implements a degenerate global
+  /// register allocator using the basic regalloc framework.
+  ///
+  FunctionPass *createBasicRegisterAllocator();
+
   /// LinearScanRegisterAllocation Pass - This pass implements the linear scan
   /// register allocation algorithm, a global register allocator.
   ///
@@ -103,7 +111,7 @@
   /// PBQPRegisterAllocation Pass - This pass implements the Partitioned Boolean
   /// Quadratic Prograaming (PBQP) based register allocator.
   ///
-  FunctionPass *createPBQPRegisterAllocator();
+  FunctionPass *createDefaultPBQPRegisterAllocator();
 
   /// SimpleRegisterCoalescing Pass - Coalesce all copies possible.  Can run
   /// independently of the register allocator.
@@ -114,7 +122,7 @@
   /// and eliminates abstract frame references.
   ///
   FunctionPass *createPrologEpilogCodeInserter();
-  
+
   /// LowerSubregs Pass - This pass lowers subregs to register-register copies
   /// which yields suboptimal, but correct code if the register allocator
   /// cannot coalesce all subreg operations during allocation.
@@ -145,36 +153,36 @@
   /// IntrinsicLowering Pass - Performs target-independent LLVM IR
   /// transformations for highly portable strategies.
   FunctionPass *createGCLoweringPass();
-  
+
   /// MachineCodeAnalysis Pass - Target-independent pass to mark safe points in
   /// machine code. Must be added very late during code generation, just prior
   /// to output, and importantly after all CFG transformations (such as branch
   /// folding).
   FunctionPass *createGCMachineCodeAnalysisPass();
-  
+
   /// Deleter Pass - Releases GC metadata.
-  /// 
+  ///
   FunctionPass *createGCInfoDeleter();
-  
+
   /// Creates a pass to print GC metadata.
-  /// 
+  ///
   FunctionPass *createGCInfoPrinter(raw_ostream &OS);
-  
+
   /// createMachineCSEPass - This pass performs global CSE on machine
   /// instructions.
   FunctionPass *createMachineCSEPass();
 
   /// createMachineLICMPass - This pass performs LICM on machine instructions.
-  /// 
+  ///
   FunctionPass *createMachineLICMPass(bool PreRegAlloc = true);
 
   /// createMachineSinkingPass - This pass performs sinking on machine
   /// instructions.
   FunctionPass *createMachineSinkingPass();
 
-  /// createOptimizeExtsPass - This pass performs sign / zero extension
-  /// optimization by increasing uses of extended values.
-  FunctionPass *createOptimizeExtsPass();
+  /// createPeepholeOptimizerPass - This pass performs peephole optimizations -
+  /// like extension and comparison eliminations.
+  FunctionPass *createPeepholeOptimizerPass();
 
   /// createOptimizePHIsPass - This pass optimizes machine instruction PHIs
   /// to take advantage of opportunities created during DAG legalization.
@@ -188,19 +196,23 @@
 
   /// createMachineVerifierPass - This pass verifies cenerated machine code
   /// instructions for correctness.
-  ///
-  /// @param allowDoubleDefs ignore double definitions of
-  ///        registers. Useful before LiveVariables has run.
-  FunctionPass *createMachineVerifierPass(bool allowDoubleDefs);
+  FunctionPass *createMachineVerifierPass();
 
   /// createDwarfEHPass - This pass mulches exception handling code into a form
   /// adapted to code generation.  Required if using dwarf exception handling.
-  FunctionPass *createDwarfEHPass(const TargetMachine *tm, bool fast);
+  FunctionPass *createDwarfEHPass(const TargetMachine *tm);
 
   /// createSjLjEHPass - This pass adapts exception handling code to use
   /// the GCC-style builtin setjmp/longjmp (sjlj) to handling EH control flow.
   FunctionPass *createSjLjEHPass(const TargetLowering *tli);
 
+  /// createLocalStackSlotAllocationPass - This pass assigns local frame
+  /// indices to stack slots relative to one another and allocates
+  /// base registers to access them when it is estimated by the target to
+  /// be out of range of normal frame pointer or stack pointer index
+  /// addressing.
+  FunctionPass *createLocalStackSlotAllocationPass();
+
 } // End llvm namespace
 
 #endif

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/PostRAHazardRecognizer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/PostRAHazardRecognizer.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/PostRAHazardRecognizer.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/PostRAHazardRecognizer.h Tue Oct 26 19:48:03 2010
@@ -75,13 +75,13 @@
   };
 
   // Itinerary data for the target.
-  const InstrItineraryData &ItinData;
+  const InstrItineraryData *ItinData;
 
   ScoreBoard ReservedScoreboard;
   ScoreBoard RequiredScoreboard;
 
 public:
-  PostRAHazardRecognizer(const InstrItineraryData &ItinData);
+  PostRAHazardRecognizer(const InstrItineraryData *ItinData);
 
   virtual HazardType getHazardType(SUnit *SU);
   virtual void Reset();

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/ProcessImplicitDefs.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/ProcessImplicitDefs.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/ProcessImplicitDefs.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/ProcessImplicitDefs.h Tue Oct 26 19:48:03 2010
@@ -31,7 +31,9 @@
   public:
     static char ID;
 
-    ProcessImplicitDefs() : MachineFunctionPass(&ID) {}
+    ProcessImplicitDefs() : MachineFunctionPass(ID) {
+      initializeProcessImplicitDefsPass(*PassRegistry::getPassRegistry());
+    }
 
     virtual void getAnalysisUsage(AnalysisUsage &au) const;
 

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAG.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAG.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAG.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAG.h Tue Oct 26 19:48:03 2010
@@ -542,17 +542,17 @@
 
   SDValue getMemcpy(SDValue Chain, DebugLoc dl, SDValue Dst, SDValue Src,
                     SDValue Size, unsigned Align, bool isVol, bool AlwaysInline,
-                    const Value *DstSV, uint64_t DstSVOff,
-                    const Value *SrcSV, uint64_t SrcSVOff);
+                    MachinePointerInfo DstPtrInfo,
+                    MachinePointerInfo SrcPtrInfo);
 
   SDValue getMemmove(SDValue Chain, DebugLoc dl, SDValue Dst, SDValue Src,
                      SDValue Size, unsigned Align, bool isVol,
-                     const Value *DstSV, uint64_t DstOSVff,
-                     const Value *SrcSV, uint64_t SrcSVOff);
+                     MachinePointerInfo DstPtrInfo,
+                     MachinePointerInfo SrcPtrInfo);
 
   SDValue getMemset(SDValue Chain, DebugLoc dl, SDValue Dst, SDValue Src,
                     SDValue Size, unsigned Align, bool isVol,
-                    const Value *DstSV, uint64_t DstSVOff);
+                    MachinePointerInfo DstPtrInfo);
 
   /// getSetCC - Helper function to make it easier to build SetCC's if you just
   /// have an ISD::CondCode instead of an SDValue.
@@ -587,8 +587,8 @@
   /// getAtomic - Gets a node for an atomic op, produces result and chain and
   /// takes 3 operands
   SDValue getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT, SDValue Chain,
-                    SDValue Ptr, SDValue Cmp, SDValue Swp, const Value* PtrVal,
-                    unsigned Alignment=0);
+                    SDValue Ptr, SDValue Cmp, SDValue Swp,
+                    MachinePointerInfo PtrInfo, unsigned Alignment=0);
   SDValue getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT, SDValue Chain,
                     SDValue Ptr, SDValue Cmp, SDValue Swp,
                     MachineMemOperand *MMO);
@@ -609,13 +609,13 @@
   SDValue getMemIntrinsicNode(unsigned Opcode, DebugLoc dl,
                               const EVT *VTs, unsigned NumVTs,
                               const SDValue *Ops, unsigned NumOps,
-                              EVT MemVT, const Value *srcValue, int SVOff,
+                              EVT MemVT, MachinePointerInfo PtrInfo,
                               unsigned Align = 0, bool Vol = false,
                               bool ReadMem = true, bool WriteMem = true);
 
   SDValue getMemIntrinsicNode(unsigned Opcode, DebugLoc dl, SDVTList VTList,
                               const SDValue *Ops, unsigned NumOps,
-                              EVT MemVT, const Value *srcValue, int SVOff,
+                              EVT MemVT, MachinePointerInfo PtrInfo,
                               unsigned Align = 0, bool Vol = false,
                               bool ReadMem = true, bool WriteMem = true);
 
@@ -630,19 +630,22 @@
   /// determined by their operands, and they produce a value AND a token chain.
   ///
   SDValue getLoad(EVT VT, DebugLoc dl, SDValue Chain, SDValue Ptr,
-                  const Value *SV, int SVOffset, bool isVolatile,
-                  bool isNonTemporal, unsigned Alignment);
+                  MachinePointerInfo PtrInfo, bool isVolatile,
+                  bool isNonTemporal, unsigned Alignment,
+                  const MDNode *TBAAInfo = 0);
   SDValue getExtLoad(ISD::LoadExtType ExtType, EVT VT, DebugLoc dl,
-                     SDValue Chain, SDValue Ptr, const Value *SV,
-                     int SVOffset, EVT MemVT, bool isVolatile,
-                     bool isNonTemporal, unsigned Alignment);
+                     SDValue Chain, SDValue Ptr, MachinePointerInfo PtrInfo,
+                     EVT MemVT, bool isVolatile,
+                     bool isNonTemporal, unsigned Alignment,
+                     const MDNode *TBAAInfo = 0);
   SDValue getIndexedLoad(SDValue OrigLoad, DebugLoc dl, SDValue Base,
                          SDValue Offset, ISD::MemIndexedMode AM);
   SDValue getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
                   EVT VT, DebugLoc dl,
                   SDValue Chain, SDValue Ptr, SDValue Offset,
-                  const Value *SV, int SVOffset, EVT MemVT,
-                  bool isVolatile, bool isNonTemporal, unsigned Alignment);
+                  MachinePointerInfo PtrInfo, EVT MemVT,
+                  bool isVolatile, bool isNonTemporal, unsigned Alignment,
+                  const MDNode *TBAAInfo = 0);
   SDValue getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
                   EVT VT, DebugLoc dl,
                   SDValue Chain, SDValue Ptr, SDValue Offset,
@@ -651,14 +654,16 @@
   /// getStore - Helper function to build ISD::STORE nodes.
   ///
   SDValue getStore(SDValue Chain, DebugLoc dl, SDValue Val, SDValue Ptr,
-                   const Value *SV, int SVOffset, bool isVolatile,
-                   bool isNonTemporal, unsigned Alignment);
+                   MachinePointerInfo PtrInfo, bool isVolatile,
+                   bool isNonTemporal, unsigned Alignment,
+                   const MDNode *TBAAInfo = 0);
   SDValue getStore(SDValue Chain, DebugLoc dl, SDValue Val, SDValue Ptr,
                    MachineMemOperand *MMO);
   SDValue getTruncStore(SDValue Chain, DebugLoc dl, SDValue Val, SDValue Ptr,
-                        const Value *SV, int SVOffset, EVT TVT,
+                        MachinePointerInfo PtrInfo, EVT TVT,
                         bool isNonTemporal, bool isVolatile,
-                        unsigned Alignment);
+                        unsigned Alignment,
+                        const MDNode *TBAAInfo = 0);
   SDValue getTruncStore(SDValue Chain, DebugLoc dl, SDValue Val, SDValue Ptr,
                         EVT TVT, MachineMemOperand *MMO);
   SDValue getIndexedStore(SDValue OrigStoe, DebugLoc dl, SDValue Base,
@@ -977,10 +982,6 @@
   /// been verified as a debug information descriptor.
   bool isVerifiedDebugInfoDesc(SDValue Op) const;
 
-  /// getShuffleScalarElt - Returns the scalar element that will make up the ith
-  /// element of the result of the vector shuffle.
-  SDValue getShuffleScalarElt(const ShuffleVectorSDNode *N, unsigned Idx);
-
   /// UnrollVectorOp - Utility function used by legalize and lowering to
   /// "unroll" a vector operation by splitting out the scalars and operating
   /// on each element individually.  If the ResNE is 0, fully unroll the vector

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGISel.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGISel.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGISel.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGISel.h Tue Oct 26 19:48:03 2010
@@ -34,6 +34,7 @@
   class ScheduleHazardRecognizer;
   class GCFunctionInfo;
   class ScheduleDAGSDNodes;
+  class LoadInst;
  
 /// SelectionDAGISel - This is the common base class used for SelectionDAG-based
 /// pattern-matching instruction selectors.
@@ -91,8 +92,8 @@
 
   /// IsLegalToFold - Returns true if the specific operand node N of
   /// U can be folded during instruction selection that starts at Root.
-  /// FIXME: This is a static member function because the PIC16 target,
-  /// which uses it during lowering.
+  /// FIXME: This is a static member function because the MSP430/SystemZ/X86
+  /// targets, which uses it during isel.  This could become a proper member.
   static bool IsLegalToFold(SDValue N, SDNode *U, SDNode *Root,
                             CodeGenOpt::Level OptLevel,
                             bool IgnoreChains = false);
@@ -253,8 +254,9 @@
     return 0;
   }
   
-  virtual bool CheckComplexPattern(SDNode *Root, SDValue N, unsigned PatternNo,
-                                   SmallVectorImpl<SDValue> &Result) {
+  virtual bool CheckComplexPattern(SDNode *Root, SDNode *Parent, SDValue N,
+                                   unsigned PatternNo,
+                        SmallVectorImpl<std::pair<SDValue, SDNode*> > &Result) {
     assert(0 && "Tblgen should generate the implementation of this!");
     return false;
   }
@@ -282,6 +284,7 @@
   
   void PrepareEHLandingPad();
   void SelectAllBasicBlocks(const Function &Fn);
+  bool TryToFoldFastISelLoad(const LoadInst *LI, FastISel *FastIS);
   void FinishBasicBlock();
 
   void SelectBasicBlock(BasicBlock::const_iterator Begin,

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGNodes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGNodes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGNodes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/SelectionDAGNodes.h Tue Oct 26 19:48:03 2010
@@ -902,6 +902,9 @@
   const Value *getSrcValue() const { return MMO->getValue(); }
   int64_t getSrcValueOffset() const { return MMO->getOffset(); }
 
+  /// Returns the TBAAInfo that describes the dereference.
+  const MDNode *getTBAAInfo() const { return MMO->getTBAAInfo(); }
+
   /// getMemoryVT - Return the type of the in-memory value.
   EVT getMemoryVT() const { return MemoryVT; }
 
@@ -909,6 +912,10 @@
   /// reference performed by operation.
   MachineMemOperand *getMemOperand() const { return MMO; }
 
+  const MachinePointerInfo &getPointerInfo() const {
+    return MMO->getPointerInfo();
+  }
+  
   /// refineAlignment - Update this MemSDNode's MachineMemOperand information
   /// to reflect the alignment of NewMMO, if it has a greater alignment.
   /// This must only be used when the new alignment applies to all users of
@@ -929,6 +936,7 @@
     // with either an intrinsic or a target opcode.
     return N->getOpcode() == ISD::LOAD                ||
            N->getOpcode() == ISD::STORE               ||
+           N->getOpcode() == ISD::PREFETCH            ||
            N->getOpcode() == ISD::ATOMIC_CMP_SWAP     ||
            N->getOpcode() == ISD::ATOMIC_SWAP         ||
            N->getOpcode() == ISD::ATOMIC_LOAD_ADD     ||
@@ -1004,8 +1012,8 @@
 
 /// MemIntrinsicSDNode - This SDNode is used for target intrinsics that touch
 /// memory and need an associated MachineMemOperand. Its opcode may be
-/// INTRINSIC_VOID, INTRINSIC_W_CHAIN, or a target-specific opcode with a
-/// value not less than FIRST_TARGET_MEMORY_OPCODE.
+/// INTRINSIC_VOID, INTRINSIC_W_CHAIN, PREFETCH, or a target-specific opcode
+/// with a value not less than FIRST_TARGET_MEMORY_OPCODE.
 class MemIntrinsicSDNode : public MemSDNode {
 public:
   MemIntrinsicSDNode(unsigned Opc, DebugLoc dl, SDVTList VTs,
@@ -1021,6 +1029,7 @@
     // early a node with a target opcode can be of this class
     return N->getOpcode() == ISD::INTRINSIC_W_CHAIN ||
            N->getOpcode() == ISD::INTRINSIC_VOID ||
+           N->getOpcode() == ISD::PREFETCH ||
            N->isTargetMemoryOpcode();
   }
 };

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/SlotIndexes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/SlotIndexes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/SlotIndexes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/SlotIndexes.h Tue Oct 26 19:48:03 2010
@@ -13,10 +13,7 @@
 //
 // SlotIndex is mostly a proxy for entries of the SlotIndexList, a class which
 // is held is LiveIntervals and provides the real numbering. This allows
-// LiveIntervals to perform largely transparent renumbering. The SlotIndex
-// class does hold a PHI bit, which determines whether the index relates to a
-// PHI use or def point, or an actual instruction. See the SlotIndex class
-// description for futher information.
+// LiveIntervals to perform largely transparent renumbering.
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_CODEGEN_SLOTINDEXES_H
@@ -128,13 +125,12 @@
     friend class SlotIndexes;
     friend struct DenseMapInfo<SlotIndex>;
 
-  private:
-    static const unsigned PHI_BIT = 1 << 2;
+    enum Slot { LOAD, USE, DEF, STORE, NUM };
 
-    PointerIntPair<IndexListEntry*, 3, unsigned> lie;
+    PointerIntPair<IndexListEntry*, 2, unsigned> lie;
 
-    SlotIndex(IndexListEntry *entry, unsigned phiAndSlot)
-      : lie(entry, phiAndSlot) {
+    SlotIndex(IndexListEntry *entry, unsigned slot)
+      : lie(entry, slot) {
       assert(entry != 0 && "Attempt to construct index with 0 pointer.");
     }
 
@@ -146,6 +142,11 @@
       return entry().getIndex() | getSlot();
     }
 
+    /// Returns the slot for this SlotIndex.
+    Slot getSlot() const {
+      return static_cast<Slot>(lie.getInt());
+    }
+
     static inline unsigned getHashValue(const SlotIndex &v) {
       IndexListEntry *ptrVal = &v.entry();
       return (unsigned((intptr_t)ptrVal) >> 4) ^
@@ -153,11 +154,6 @@
     }
 
   public:
-
-    // FIXME: Ugh. This is public because LiveIntervalAnalysis is still using it
-    // for some spill weight stuff. Fix that, then make this private.
-    enum Slot { LOAD, USE, DEF, STORE, NUM };
-
     static inline SlotIndex getEmptyKey() {
       return SlotIndex(IndexListEntry::getEmptyKeyEntry(), 0);
     }
@@ -165,22 +161,13 @@
     static inline SlotIndex getTombstoneKey() {
       return SlotIndex(IndexListEntry::getTombstoneKeyEntry(), 0);
     }
-    
+
     /// Construct an invalid index.
     SlotIndex() : lie(IndexListEntry::getEmptyKeyEntry(), 0) {}
 
-    // Construct a new slot index from the given one, set the phi flag on the
-    // new index to the value of the phi parameter.
-    SlotIndex(const SlotIndex &li, bool phi)
-      : lie(&li.entry(), phi ? PHI_BIT | li.getSlot() : (unsigned)li.getSlot()){
-      assert(lie.getPointer() != 0 &&
-             "Attempt to construct index with 0 pointer.");
-    }
-
-    // Construct a new slot index from the given one, set the phi flag on the
-    // new index to the value of the phi parameter, and the slot to the new slot.
-    SlotIndex(const SlotIndex &li, bool phi, Slot s)
-      : lie(&li.entry(), phi ? PHI_BIT | s : (unsigned)s) {
+    // Construct a new slot index from the given one, and set the slot.
+    SlotIndex(const SlotIndex &li, Slot s)
+      : lie(&li.entry(), unsigned(s)) {
       assert(lie.getPointer() != 0 &&
              "Attempt to construct index with 0 pointer.");
     }
@@ -235,14 +222,24 @@
       return other.getIndex() - getIndex();
     }
 
-    /// Returns the slot for this SlotIndex.
-    Slot getSlot() const {
-      return static_cast<Slot>(lie.getInt()  & ~PHI_BIT);
+    /// isLoad - Return true if this is a LOAD slot.
+    bool isLoad() const {
+      return getSlot() == LOAD;
+    }
+
+    /// isDef - Return true if this is a DEF slot.
+    bool isDef() const {
+      return getSlot() == DEF;
+    }
+
+    /// isUse - Return true if this is a USE slot.
+    bool isUse() const {
+      return getSlot() == USE;
     }
 
-    /// Returns the state of the PHI bit.
-    bool isPHI() const {
-      return lie.getInt() & PHI_BIT;
+    /// isStore - Return true if this is a STORE slot.
+    bool isStore() const {
+      return getSlot() == STORE;
     }
 
     /// Returns the base index for associated with this index. The base index
@@ -389,9 +386,6 @@
     /// and MBB id.
     std::vector<IdxMBBPair> idx2MBBMap;
 
-    typedef DenseMap<const MachineBasicBlock*, SlotIndex> TerminatorGapsMap;
-    TerminatorGapsMap terminatorGaps;
-
     // IndexListEntry allocator.
     BumpPtrAllocator ileAllocator;
 
@@ -475,7 +469,9 @@
   public:
     static char ID;
 
-    SlotIndexes() : MachineFunctionPass(&ID), indexListHead(0) {}
+    SlotIndexes() : MachineFunctionPass(ID), indexListHead(0) {
+      initializeSlotIndexesPass(*PassRegistry::getPassRegistry());
+    }
 
     virtual void getAnalysisUsage(AnalysisUsage &au) const;
     virtual void releaseMemory(); 
@@ -563,14 +559,6 @@
       return itr->second.second;
     }
 
-    /// Returns the terminator gap for the given index.
-    SlotIndex getTerminatorGap(const MachineBasicBlock *mbb) {
-      TerminatorGapsMap::iterator itr = terminatorGaps.find(mbb);
-      assert(itr != terminatorGaps.end() &&
-             "All MBBs should have terminator gaps in their indexes.");
-      return itr->second;
-    }
-
     /// Returns the basic block which the given index falls in.
     MachineBasicBlock* getMBBFromIndex(SlotIndex index) const {
       std::vector<IdxMBBPair>::const_iterator I =
@@ -773,7 +761,6 @@
       MachineFunction::iterator nextMBB =
         llvm::next(MachineFunction::iterator(mbb));
       IndexListEntry *startEntry = createEntry(0, 0);
-      IndexListEntry *terminatorEntry = createEntry(0, 0); 
       IndexListEntry *nextEntry = 0;
 
       if (nextMBB == mbb->getParent()->end()) {
@@ -783,15 +770,10 @@
       }
 
       insert(nextEntry, startEntry);
-      insert(nextEntry, terminatorEntry);
 
       SlotIndex startIdx(startEntry, SlotIndex::LOAD);
-      SlotIndex terminatorIdx(terminatorEntry, SlotIndex::PHI_BIT);
       SlotIndex endIdx(nextEntry, SlotIndex::LOAD);
 
-      terminatorGaps.insert(
-        std::make_pair(mbb, terminatorIdx));
-
       mbb2IdxMap.insert(
         std::make_pair(mbb, std::make_pair(startIdx, endIdx)));
 

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h Tue Oct 26 19:48:03 2010
@@ -105,7 +105,6 @@
   const MCSection *UStringSection;
   const MCSection *TextCoalSection;
   const MCSection *ConstTextCoalSection;
-  const MCSection *ConstDataCoalSection;
   const MCSection *ConstDataSection;
   const MCSection *DataCoalSection;
   const MCSection *DataCommonSection;

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.h Tue Oct 26 19:48:03 2010
@@ -74,11 +74,13 @@
       FIRST_VECTOR_VALUETYPE = v2i8,
       LAST_VECTOR_VALUETYPE  = v4f64,
 
-      Flag           =  33,   // This glues nodes together during pre-RA sched
+      x86mmx         =  33,   // This is an X86 MMX value
 
-      isVoid         =  34,   // This has no value
+      Flag           =  34,   // This glues nodes together during pre-RA sched
 
-      LAST_VALUETYPE =  35,   // This always remains at the end of the list.
+      isVoid         =  35,   // This has no value
+
+      LAST_VALUETYPE =  36,   // This always remains at the end of the list.
 
       // This is the current maximum for LAST_VALUETYPE.
       // EVT::MAX_ALLOWED_VALUETYPE is used for asserts and to size bit vectors
@@ -159,14 +161,12 @@
     /// getPow2VectorType - Widens the length of the given vector EVT up to
     /// the nearest power of 2 and returns that type.
     MVT getPow2VectorType() const {
-      if (!isPow2VectorType()) {
-        unsigned NElts = getVectorNumElements();
-        unsigned Pow2NElts = 1 <<  Log2_32_Ceil(NElts);
-        return MVT::getVectorVT(getVectorElementType(), Pow2NElts);
-      }
-      else {
+      if (isPow2VectorType())
         return *this;
-      }
+
+      unsigned NElts = getVectorNumElements();
+      unsigned Pow2NElts = 1 << Log2_32_Ceil(NElts);
+      return MVT::getVectorVT(getVectorElementType(), Pow2NElts);
     }
 
     /// getScalarType - If this is a vector type, return the element type,
@@ -249,6 +249,7 @@
       case i32 :
       case v4i8:
       case v2i16: return 32;
+      case x86mmx:
       case f64 :
       case i64 :
       case v8i8:
@@ -350,17 +351,6 @@
       }
       return (MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE);
     }
-    
-    static MVT getIntVectorWithNumElements(unsigned NumElts) {
-      switch (NumElts) {
-      default: return (MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE);
-      case  1: return MVT::v1i64;
-      case  2: return MVT::v2i32;
-      case  4: return MVT::v4i16;
-      case  8: return MVT::v8i8;
-      case 16: return MVT::v16i8;
-      }
-    }
   };
 
   struct EVT { // EVT = Extended Value Type
@@ -374,22 +364,16 @@
     EVT(MVT::SimpleValueType SVT) : V(SVT), LLVMTy(0) { }
     EVT(MVT S) : V(S), LLVMTy(0) {}
 
-    bool operator==(const EVT VT) const {
-      if (V.SimpleTy == VT.V.SimpleTy) {
-        if (V.SimpleTy == MVT::INVALID_SIMPLE_VALUE_TYPE)
-          return LLVMTy == VT.LLVMTy;
+    bool operator==(EVT VT) const {
+      return !(*this != VT);
+    }
+    bool operator!=(EVT VT) const {
+      if (V.SimpleTy != VT.V.SimpleTy)
         return true;
-      }
+      if (V.SimpleTy == MVT::INVALID_SIMPLE_VALUE_TYPE)
+        return LLVMTy != VT.LLVMTy;
       return false;
     }
-    bool operator!=(const EVT VT) const {
-      if (V.SimpleTy == VT.V.SimpleTy) {
-        if (V.SimpleTy == MVT::INVALID_SIMPLE_VALUE_TYPE)
-          return LLVMTy != VT.LLVMTy;
-        return false;
-      }
-      return true;
-    }
 
     /// getFloatingPointVT - Returns the EVT that represents a floating point
     /// type with the given number of bits.  There are two floating point types
@@ -402,30 +386,32 @@
     /// number of bits.
     static EVT getIntegerVT(LLVMContext &Context, unsigned BitWidth) {
       MVT M = MVT::getIntegerVT(BitWidth);
-      if (M.SimpleTy == MVT::INVALID_SIMPLE_VALUE_TYPE)
-        return getExtendedIntegerVT(Context, BitWidth);
-      else
+      if (M.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE)
         return M;
+      return getExtendedIntegerVT(Context, BitWidth);
     }
 
     /// getVectorVT - Returns the EVT that represents a vector NumElements in
     /// length, where each element is of type VT.
     static EVT getVectorVT(LLVMContext &Context, EVT VT, unsigned NumElements) {
       MVT M = MVT::getVectorVT(VT.V, NumElements);
-      if (M.SimpleTy == MVT::INVALID_SIMPLE_VALUE_TYPE)
-        return getExtendedVectorVT(Context, VT, NumElements);
-      else
+      if (M.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE)
         return M;
+      return getExtendedVectorVT(Context, VT, NumElements);
     }
 
     /// getIntVectorWithNumElements - Return any integer vector type that has
     /// the specified number of elements.
     static EVT getIntVectorWithNumElements(LLVMContext &C, unsigned NumElts) {
-      MVT M = MVT::getIntVectorWithNumElements(NumElts);
-      if (M.SimpleTy == MVT::INVALID_SIMPLE_VALUE_TYPE)
-        return getVectorVT(C, MVT::i8, NumElts);
-      else
-        return M;
+      switch (NumElts) {
+      default: return getVectorVT(C, MVT::i8, NumElts);
+      case  1: return MVT::v1i64;
+      case  2: return MVT::v2i32;
+      case  4: return MVT::v4i16;
+      case  8: return MVT::v8i8;
+      case 16: return MVT::v16i8;
+      }
+      return MVT::INVALID_SIMPLE_VALUE_TYPE;
     }
 
     /// isSimple - Test if the given EVT is simple (as opposed to being
@@ -457,26 +443,27 @@
 
     /// is64BitVector - Return true if this is a 64-bit vector type.
     bool is64BitVector() const {
-      return isSimple() ?
-             (V==MVT::v8i8 || V==MVT::v4i16 || V==MVT::v2i32 ||
-              V==MVT::v1i64 || V==MVT::v2f32) :
-             isExtended64BitVector();
+      if (!isSimple())
+        return isExtended64BitVector();
+
+      return (V == MVT::v8i8  || V==MVT::v4i16 || V==MVT::v2i32 ||
+              V == MVT::v1i64 || V==MVT::v2f32);
     }
 
     /// is128BitVector - Return true if this is a 128-bit vector type.
     bool is128BitVector() const {
-      return isSimple() ?
-             (V==MVT::v16i8 || V==MVT::v8i16 || V==MVT::v4i32 ||
-              V==MVT::v2i64 || V==MVT::v4f32 || V==MVT::v2f64) :
-             isExtended128BitVector();
+      if (!isSimple())
+        return isExtended128BitVector();
+      return (V==MVT::v16i8 || V==MVT::v8i16 || V==MVT::v4i32 ||
+              V==MVT::v2i64 || V==MVT::v4f32 || V==MVT::v2f64);
     }
 
     /// is256BitVector - Return true if this is a 256-bit vector type.
     inline bool is256BitVector() const {
-      return isSimple()
-        ? (V==MVT::v8f32 || V==MVT::v4f64 || V==MVT::v32i8 ||
-           V==MVT::v16i16 || V==MVT::v8i32 || V==MVT::v4i64)
-        : isExtended256BitVector();
+      if (!isSimple())
+        return isExtended256BitVector();
+      return (V == MVT::v8f32  || V == MVT::v4f64 || V == MVT::v32i8 ||
+              V == MVT::v16i16 || V == MVT::v8i32 || V == MVT::v4i64);
     }
 
     /// is512BitVector - Return true if this is a 512-bit vector type.
@@ -550,8 +537,7 @@
       assert(isVector() && "Invalid vector type!");
       if (isSimple())
         return V.getVectorElementType();
-      else
-        return getExtendedVectorElementType();
+      return getExtendedVectorElementType();
     }
 
     /// getVectorNumElements - Given a vector type, return the number of
@@ -560,16 +546,14 @@
       assert(isVector() && "Invalid vector type!");
       if (isSimple())
         return V.getVectorNumElements();
-      else
-        return getExtendedVectorNumElements();
+      return getExtendedVectorNumElements();
     }
 
     /// getSizeInBits - Return the size of the specified value type in bits.
     unsigned getSizeInBits() const {
       if (isSimple())
         return V.getSizeInBits();
-      else
-        return getExtendedSizeInBits();
+      return getExtendedSizeInBits();
     }
 
     /// getStoreSize - Return the number of bytes overwritten by a store
@@ -592,8 +576,7 @@
       unsigned BitWidth = getSizeInBits();
       if (BitWidth <= 8)
         return EVT(MVT::i8);
-      else
-        return getIntegerVT(Context, 1 << Log2_32_Ceil(BitWidth));
+      return getIntegerVT(Context, 1 << Log2_32_Ceil(BitWidth));
     }
 
     /// getHalfSizedIntegerVT - Finds the smallest simple value type that is
@@ -604,12 +587,10 @@
       assert(isInteger() && !isVector() && "Invalid integer type!");
       unsigned EVTSize = getSizeInBits();
       for (unsigned IntVT = MVT::FIRST_INTEGER_VALUETYPE;
-          IntVT <= MVT::LAST_INTEGER_VALUETYPE;
-          ++IntVT) {
+          IntVT <= MVT::LAST_INTEGER_VALUETYPE; ++IntVT) {
         EVT HalfVT = EVT((MVT::SimpleValueType)IntVT);
-        if(HalfVT.getSizeInBits() * 2 >= EVTSize) { 
+        if (HalfVT.getSizeInBits() * 2 >= EVTSize)
           return HalfVT;
-        }
       }
       return getIntegerVT(Context, (EVTSize + 1) / 2);
     }

Modified: llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.td
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.td?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.td (original)
+++ llvm/branches/wendling/eh/include/llvm/CodeGen/ValueTypes.td Tue Oct 26 19:48:03 2010
@@ -46,17 +46,18 @@
 def v8i32  : ValueType<256, 23>;   //  8 x i32 vector value
 def v1i64  : ValueType<64 , 24>;   //  1 x i64 vector value
 def v2i64  : ValueType<128, 25>;   //  2 x i64 vector value
-def v4i64  : ValueType<256, 26>;   //  4 x f64 vector value
-def v8i64  : ValueType<512, 27>;   //  4 x f64 vector value
+def v4i64  : ValueType<256, 26>;   //  4 x i64 vector value
+def v8i64  : ValueType<512, 27>;   //  8 x i64 vector value
 
-def v2f32  : ValueType<64,  28>;   //  2 x f32 vector value
+def v2f32  : ValueType<64 , 28>;   //  2 x f32 vector value
 def v4f32  : ValueType<128, 29>;   //  4 x f32 vector value
 def v8f32  : ValueType<256, 30>;   //  8 x f32 vector value
 def v2f64  : ValueType<128, 31>;   //  2 x f64 vector value
 def v4f64  : ValueType<256, 32>;   //  4 x f64 vector value
 
-def FlagVT : ValueType<0  , 33>;   // Pre-RA sched glue
-def isVoid : ValueType<0  , 34>;   // Produces no value
+def x86mmx : ValueType<64 , 33>;   // X86 MMX value
+def FlagVT : ValueType<0  , 34>;   // Pre-RA sched glue
+def isVoid : ValueType<0  , 35>;   // Produces no value
 
 def MetadataVT: ValueType<0, 250>; // Metadata
 

Modified: llvm/branches/wendling/eh/include/llvm/CompilerDriver/BuiltinOptions.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CompilerDriver/BuiltinOptions.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CompilerDriver/BuiltinOptions.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CompilerDriver/BuiltinOptions.h Tue Oct 26 19:48:03 2010
@@ -18,6 +18,8 @@
 
 #include <string>
 
+namespace llvmc {
+
 namespace SaveTempsEnum { enum Values { Cwd, Obj, Unset }; }
 
 extern llvm::cl::list<std::string> InputFilenames;
@@ -32,4 +34,6 @@
 extern llvm::cl::opt<bool> WriteGraph;
 extern llvm::cl::opt<SaveTempsEnum::Values> SaveTemps;
 
+} // End namespace llvmc.
+
 #endif // LLVM_INCLUDE_COMPILER_DRIVER_BUILTIN_OPTIONS_H

Modified: llvm/branches/wendling/eh/include/llvm/CompilerDriver/Common.td
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CompilerDriver/Common.td?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CompilerDriver/Common.td (original)
+++ llvm/branches/wendling/eh/include/llvm/CompilerDriver/Common.td Tue Oct 26 19:48:03 2010
@@ -40,7 +40,6 @@
 
 // Possible option properties.
 
-def extern;
 def help;
 def hidden;
 def init;
@@ -94,17 +93,8 @@
 def set_option;
 def unset_option;
 
-// Increase/decrease the edge weight.
+// Increase the edge weight.
 def inc_weight;
-def dec_weight;
-
-// Empty DAG marker.
-def empty_dag_marker;
-
-// Used to specify plugin priority.
-class PluginPriority<int p> {
-      int priority = p;
-}
 
 // Option list - a single place to specify options.
 class OptionList<list<dag> l> {
@@ -118,31 +108,17 @@
 
 // Map from suffixes to language names
 
-class LangToSuffixes<string str, list<string> lst> {
-      string lang = str;
-      list<string> suffixes = lst;
-}
+def lang_to_suffixes;
 
-class LanguageMap<list<LangToSuffixes> lst> {
-      list<LangToSuffixes> map = lst;
+class LanguageMap<list<dag> l> {
+      list<dag> map = l;
 }
 
 // Compilation graph
 
-class EdgeBase<string t1, string t2, dag d> {
-      string a = t1;
-      string b = t2;
-      dag weight = d;
-}
-
-class Edge<string t1, string t2> : EdgeBase<t1, t2, (empty_dag_marker)>;
-
-// Edge and SimpleEdge are synonyms.
-class SimpleEdge<string t1, string t2> : EdgeBase<t1, t2, (empty_dag_marker)>;
-
-// Optionally enabled edge.
-class OptionalEdge<string t1, string t2, dag props> : EdgeBase<t1, t2, props>;
+def edge;
+def optional_edge;
 
-class CompilationGraph<list<EdgeBase> lst> {
-      list<EdgeBase> edges = lst;
+class CompilationGraph<list<dag> l> {
+      list<dag> edges = l;
 }

Modified: llvm/branches/wendling/eh/include/llvm/CompilerDriver/CompilationGraph.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CompilerDriver/CompilationGraph.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CompilerDriver/CompilationGraph.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CompilerDriver/CompilationGraph.h Tue Oct 26 19:48:03 2010
@@ -46,7 +46,7 @@
     virtual ~Edge() {}
 
     const std::string& ToolName() const { return ToolName_; }
-    virtual unsigned Weight(const InputLanguagesSet& InLangs) const = 0;
+    virtual int Weight(const InputLanguagesSet& InLangs) const = 0;
   private:
     std::string ToolName_;
   };
@@ -55,7 +55,7 @@
   class SimpleEdge : public Edge {
   public:
     SimpleEdge(const std::string& T) : Edge(T) {}
-    unsigned Weight(const InputLanguagesSet&) const { return 1; }
+    int Weight(const InputLanguagesSet&) const { return 1; }
   };
 
   /// Node - A node (vertex) of the compilation graph.

Removed: llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkage.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkage.h?rev=117424&view=auto
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkage.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkage.h (removed)
@@ -1,122 +0,0 @@
-//===--- ForceLinkage.h - The LLVM Compiler Driver --------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  A bit of preprocessor magic to force references to static libraries. Needed
-//  because plugin initialization is done via static variables.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H
-#define LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H
-
-#include "llvm/CompilerDriver/ForceLinkageMacros.h"
-
-namespace llvmc {
-
-// Declare all ForceLinkage$(PluginName) functions.
-
-#ifdef LLVMC_BUILTIN_PLUGIN_1
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_1);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_2
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_2);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_3
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_3);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_4
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_4);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_5
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_5);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_6
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_6);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_7
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_7);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_8
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_8);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_9
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_9);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_10
-      LLVMC_FORCE_LINKAGE_DECL(LLVMC_BUILTIN_PLUGIN_10);
-#endif
-
-namespace force_linkage {
-
-  struct LinkageForcer {
-
-    LinkageForcer() {
-
-// Call all ForceLinkage$(PluginName) functions.
-#ifdef LLVMC_BUILTIN_PLUGIN_1
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_1);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_2
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_2);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_3
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_3);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_4
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_4);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_5
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_5);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_6
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_6);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_7
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_7);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_8
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_8);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_9
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_9);
-#endif
-
-#ifdef LLVMC_BUILTIN_PLUGIN_10
-      LLVMC_FORCE_LINKAGE_CALL(LLVMC_BUILTIN_PLUGIN_10);
-#endif
-
-    }
-  };
-} // End namespace force_linkage.
-
-// The only externally used bit.
-void ForceLinkage() {
-  force_linkage::LinkageForcer dummy;
-}
-
-} // End namespace llvmc.
-
-#endif // LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_H

Removed: llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkageMacros.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkageMacros.h?rev=117424&view=auto
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkageMacros.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CompilerDriver/ForceLinkageMacros.h (removed)
@@ -1,29 +0,0 @@
-//===--- ForceLinkageMacros.h - The LLVM Compiler Driver --------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  Preprocessor magic that forces references to static libraries - common
-//  macros used by both driver and plugins.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_MACROS_H
-#define LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_MACROS_H
-
-#define LLVMC_FORCE_LINKAGE_PREFIX(PluginName) ForceLinkage ## PluginName
-
-#define LLVMC_FORCE_LINKAGE_FUN(PluginName) \
-  LLVMC_FORCE_LINKAGE_PREFIX(PluginName)
-
-#define LLVMC_FORCE_LINKAGE_DECL(PluginName) \
-  void LLVMC_FORCE_LINKAGE_FUN(PluginName) ()
-
-#define LLVMC_FORCE_LINKAGE_CALL(PluginName) \
-  LLVMC_FORCE_LINKAGE_FUN(PluginName) ()
-
-#endif // LLVM_INCLUDE_COMPILER_DRIVER_FORCE_LINKAGE_MACROS_H

Modified: llvm/branches/wendling/eh/include/llvm/CompilerDriver/Main.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CompilerDriver/Main.inc?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CompilerDriver/Main.inc (original)
+++ llvm/branches/wendling/eh/include/llvm/CompilerDriver/Main.inc Tue Oct 26 19:48:03 2010
@@ -7,26 +7,16 @@
 //
 //===----------------------------------------------------------------------===//
 //
-//  This tool provides a single point of access to the LLVM
-//  compilation tools.  It has many options. To discover the options
-//  supported please refer to the tools' manual page or run the tool
-//  with the -help option.
-//
-//  This file provides the default entry point for the driver executable.
+//  Default main() for the driver executable.
 //
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_INCLUDE_COMPILER_DRIVER_MAIN_INC
 #define LLVM_INCLUDE_COMPILER_DRIVER_MAIN_INC
 
-#include "llvm/CompilerDriver/ForceLinkage.h"
-
-namespace llvmc {
-  int Main(int argc, char** argv);
-}
+#include "llvm/CompilerDriver/Main.h"
 
 int main(int argc, char** argv) {
-  llvmc::ForceLinkage();
   return llvmc::Main(argc, argv);
 }
 

Removed: llvm/branches/wendling/eh/include/llvm/CompilerDriver/Plugin.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CompilerDriver/Plugin.h?rev=117424&view=auto
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CompilerDriver/Plugin.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CompilerDriver/Plugin.h (removed)
@@ -1,81 +0,0 @@
-//===--- Plugin.h - The LLVM Compiler Driver --------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  Plugin support for llvmc.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_INCLUDE_COMPILER_DRIVER_PLUGIN_H
-#define LLVM_INCLUDE_COMPILER_DRIVER_PLUGIN_H
-
-#include "llvm/Support/Registry.h"
-
-namespace llvmc {
-
-  class LanguageMap;
-  class CompilationGraph;
-
-  /// BasePlugin - An abstract base class for all LLVMC plugins.
-  struct BasePlugin {
-
-    /// Priority - Plugin priority, useful for handling dependencies
-    /// between plugins. Plugins with lower priorities are loaded
-    /// first.
-    virtual int Priority() const { return 0; }
-
-    /// PreprocessOptions - The auto-generated function that performs various
-    /// consistency checks on options (like ensuring that -O2 and -O3 are not
-    /// used together).
-    virtual int PreprocessOptions() const = 0;
-
-    /// PopulateLanguageMap - The auto-generated function that fills in
-    /// the language map (map from file extensions to language names).
-    virtual int PopulateLanguageMap(LanguageMap&) const = 0;
-
-    /// PopulateCompilationGraph - The auto-generated function that
-    /// populates the compilation graph with nodes and edges.
-    virtual int PopulateCompilationGraph(CompilationGraph&) const = 0;
-
-    /// Needed to avoid a compiler warning.
-    virtual ~BasePlugin() {}
-  };
-
-  typedef llvm::Registry<BasePlugin> PluginRegistry;
-
-  template <class P>
-  struct RegisterPlugin
-    : public PluginRegistry::Add<P> {
-    typedef PluginRegistry::Add<P> Base;
-
-    RegisterPlugin(const char* Name = "Nameless",
-                   const char* Desc = "Auto-generated plugin")
-      : Base(Name, Desc) {}
-  };
-
-
-  /// PluginLoader - Helper class used by the main program for
-  /// lifetime management.
-  struct PluginLoader {
-    PluginLoader();
-    ~PluginLoader();
-
-    /// RunInitialization - Calls PreprocessOptions, PopulateLanguageMap and
-    /// PopulateCompilationGraph methods of all plugins. This populates the
-    /// global language map and the compilation graph.
-    int RunInitialization(LanguageMap& langMap, CompilationGraph& graph) const;
-
-  private:
-    // noncopyable
-    PluginLoader(const PluginLoader& other);
-    const PluginLoader& operator=(const PluginLoader& other);
-  };
-
-}
-
-#endif // LLVM_INCLUDE_COMPILER_DRIVER_PLUGIN_H

Modified: llvm/branches/wendling/eh/include/llvm/CompilerDriver/Tool.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/CompilerDriver/Tool.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/CompilerDriver/Tool.h (original)
+++ llvm/branches/wendling/eh/include/llvm/CompilerDriver/Tool.h Tue Oct 26 19:48:03 2010
@@ -58,7 +58,7 @@
 
     virtual const char*  Name() const = 0;
     virtual const char** InputLanguages() const = 0;
-    virtual const char*  OutputLanguage() const = 0;
+    virtual const char** OutputLanguages() const = 0;
 
     virtual bool IsJoin() const = 0;
     virtual bool WorksOnEmpty() const = 0;

Propchange: llvm/branches/wendling/eh/include/llvm/Config/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Oct 26 19:48:03 2010
@@ -4,3 +4,4 @@
 Targets.def
 AsmParsers.def
 Disassemblers.def
+llvm-config.h

Modified: llvm/branches/wendling/eh/include/llvm/Config/config.h.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Config/config.h.cmake?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Config/config.h.cmake (original)
+++ llvm/branches/wendling/eh/include/llvm/Config/config.h.cmake Tue Oct 26 19:48:03 2010
@@ -3,12 +3,18 @@
 ** Created by Kevin from config.h.in **
 ***************************************/
 
+#ifndef CONFIG_H
+#define CONFIG_H
+
 /* Define if dlopen(0) will open the symbols of the program */
 #undef CAN_DLOPEN_SELF
 
 /* Define if CBE is enabled for printf %a output */
 #undef ENABLE_CBE_PRINTF_A
 
+/* Relative directory for resource files */
+#define CLANG_RESOURCE_DIR "${CLANG_RESOURCE_DIR}"
+
 /* Directories clang will search for headers */
 #define C_INCLUDE_DIRS "${C_INCLUDE_DIRS}"
 
@@ -458,6 +464,9 @@
 /* Define to 1 if you have the <valgrind/valgrind.h> header file. */
 #cmakedefine HAVE_VALGRIND_VALGRIND_H ${HAVE_VALGRIND_VALGRIND_H}
 
+/* Define to 1 if you have the <fenv.h> header file. */
+#cmakedefine HAVE_FENV_H ${HAVE_FENV_H}
+
 /* Define to 1 if you have the <windows.h> header file. */
 #cmakedefine HAVE_WINDOWS_H ${HAVE_WINDOWS_H}
 
@@ -525,7 +534,7 @@
 #cmakedefine LLVM_PATH_TWOPI "${LLVM_PATH_TWOPI}"
 
 /* Installation prefix directory */
-#undef LLVM_PREFIX
+#cmakedefine LLVM_PREFIX "${LLVM_PREFIX}"
 
 /* Define if the OS needs help to load dependent libraries for dlopen(). */
 #cmakedefine LTDL_DLOPEN_DEPLIBS ${LTDL_DLOPEN_DEPLIBS}
@@ -623,5 +632,16 @@
 /* Define to a function implementing strdup */
 #cmakedefine strdup ${strdup}
 
-/* Native LLVM architecture */
-#cmakedefine LLVM_NATIVE_ARCH ${LLVM_NATIVE_ARCH}Target
+/* LLVM architecture name for the native architecture, if available */
+#cmakedefine LLVM_NATIVE_ARCH ${LLVM_NATIVE_ARCH}
+  
+/* LLVM name for the native Target init function, if available */
+#cmakedefine LLVM_NATIVE_TARGET LLVMInitialize${LLVM_NATIVE_ARCH}Target
+ 
+/* LLVM name for the native TargetInfo init function, if available */
+#cmakedefine LLVM_NATIVE_TARGETINFO LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo
+ 
+/* LLVM name for the native AsmPrinter init function, if available */
+#cmakedefine LLVM_NATIVE_ASMPRINTER LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter
+
+#endif

Modified: llvm/branches/wendling/eh/include/llvm/Config/config.h.in
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Config/config.h.in?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Config/config.h.in (original)
+++ llvm/branches/wendling/eh/include/llvm/Config/config.h.in Tue Oct 26 19:48:03 2010
@@ -1,5 +1,11 @@
 /* include/llvm/Config/config.h.in.  Generated from autoconf/configure.ac by autoheader.  */
 
+#ifndef CONFIG_H
+#define CONFIG_H
+
+/* Relative directory for resource files */
+#undef CLANG_RESOURCE_DIR
+
 /* 32 bit multilib directory. */
 #undef CXX_INCLUDE_32BIT_DIR
 
@@ -115,6 +121,9 @@
 /* Define if the neat program is available */
 #undef HAVE_FDP
 
+/* Define to 1 if you have the <fenv.h> header file. */
+#undef HAVE_FENV_H
+
 /* Define if libffi is available on this platform. */
 #undef HAVE_FFI_CALL
 
@@ -145,9 +154,6 @@
 /* Define to 1 if you have the `getrusage' function. */
 #undef HAVE_GETRUSAGE
 
-/* Have Darwin getsect() support */
-#undef HAVE_GETSECT
-
 /* Define to 1 if you have the `gettimeofday' function. */
 #undef HAVE_GETTIMEOFDAY
 
@@ -221,9 +227,6 @@
 /* Define to 1 if you have the <mach-o/dyld.h> header file. */
 #undef HAVE_MACH_O_DYLD_H
 
-/* Define to 1 if you have the <mach-o/getsect.h> header file. */
-#undef HAVE_MACH_O_GETSECT_H
-
 /* Define if mallinfo() is available on this platform. */
 #undef HAVE_MALLINFO
 
@@ -461,9 +464,15 @@
 /* Define to 1 if you have the <windows.h> header file. */
 #undef HAVE_WINDOWS_H
 
+/* Define if the xdot.py program is available */
+#undef HAVE_XDOT_PY
+
 /* Define to 1 if you have the `__dso_handle' function. */
 #undef HAVE___DSO_HANDLE
 
+/* Linker version detected at compile time. */
+#undef HOST_LINK_VERSION
+
 /* Installation directory for binary executables */
 #undef LLVM_BINDIR
 
@@ -500,6 +509,15 @@
 /* LLVM architecture name for the native architecture, if available */
 #undef LLVM_NATIVE_ARCH
 
+/* LLVM name for the native AsmPrinter init function, if available */
+#undef LLVM_NATIVE_ASMPRINTER
+
+/* LLVM name for the native Target init function, if available */
+#undef LLVM_NATIVE_TARGET
+
+/* LLVM name for the native TargetInfo init function, if available */
+#undef LLVM_NATIVE_TARGETINFO
+
 /* Define if this is Unixish platform */
 #undef LLVM_ON_UNIX
 
@@ -530,6 +548,9 @@
 /* Define to path to twopi program if found or 'echo twopi' otherwise */
 #undef LLVM_PATH_TWOPI
 
+/* Define to path to xdot.py program if found or 'echo xdot.py' otherwise */
+#undef LLVM_PATH_XDOT_PY
+
 /* Installation prefix directory */
 #undef LLVM_PREFIX
 
@@ -604,3 +625,5 @@
 
 /* Define to `unsigned int' if <sys/types.h> does not define. */
 #undef size_t
+
+#endif

Modified: llvm/branches/wendling/eh/include/llvm/Constant.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Constant.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Constant.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Constant.h Tue Oct 26 19:48:03 2010
@@ -20,7 +20,6 @@
   class APInt;
 
   template<typename T> class SmallVectorImpl;
-  class LLVMContext;
 
 /// This is an important base class in LLVM. It provides the common facilities
 /// of all constant values in an LLVM program. A constant is a value that is

Modified: llvm/branches/wendling/eh/include/llvm/Constants.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Constants.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Constants.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Constants.h Tue Oct 26 19:48:03 2010
@@ -25,7 +25,6 @@
 #include "llvm/OperandTraits.h"
 #include "llvm/ADT/APInt.h"
 #include "llvm/ADT/APFloat.h"
-#include "llvm/ADT/SmallVector.h"
 #include <vector>
 
 namespace llvm {
@@ -33,7 +32,6 @@
 class ArrayType;
 class IntegerType;
 class StructType;
-class UnionType;
 class PointerType;
 class VectorType;
 
@@ -41,6 +39,8 @@
 struct ConstantCreator;
 template<class ConstantClass, class TypeClass>
 struct ConvertConstantType;
+template<typename T, unsigned N>
+class SmallVector;
 
 //===----------------------------------------------------------------------===//
 /// This is the shared class of boolean and integer constants. This class 
@@ -459,49 +459,6 @@
 
 DEFINE_TRANSPARENT_CASTED_OPERAND_ACCESSORS(ConstantStruct, Constant)
 
-//===----------------------------------------------------------------------===//
-// ConstantUnion - Constant Union Declarations
-//
-class ConstantUnion : public Constant {
-  friend struct ConstantCreator<ConstantUnion, UnionType, Constant*>;
-  ConstantUnion(const ConstantUnion &);      // DO NOT IMPLEMENT
-protected:
-  ConstantUnion(const UnionType *T, Constant* Val);
-public:
-  // ConstantUnion accessors
-  static Constant *get(const UnionType *T, Constant* V);
-
-  /// Transparently provide more efficient getOperand methods.
-  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Constant);
-  
-  /// getType() specialization - Reduce amount of casting...
-  ///
-  inline const UnionType *getType() const {
-    return reinterpret_cast<const UnionType*>(Value::getType());
-  }
-
-  /// isNullValue - Return true if this is the value that would be returned by
-  /// getNullValue.  This always returns false because zero structs are always
-  /// created as ConstantAggregateZero objects.
-  virtual bool isNullValue() const {
-    return false;
-  }
-
-  virtual void destroyConstant();
-  virtual void replaceUsesOfWithOnConstant(Value *From, Value *To, Use *U);
-
-  /// Methods for support type inquiry through isa, cast, and dyn_cast:
-  static inline bool classof(const ConstantUnion *) { return true; }
-  static bool classof(const Value *V) {
-    return V->getValueID() == ConstantUnionVal;
-  }
-};
-
-template <>
-struct OperandTraits<ConstantUnion> : public FixedNumOperandTraits<1> {
-};
-
-DEFINE_TRANSPARENT_CASTED_OPERAND_ACCESSORS(ConstantUnion, Constant)
 
 //===----------------------------------------------------------------------===//
 /// ConstantVector - Constant Vector Declarations

Modified: llvm/branches/wendling/eh/include/llvm/DerivedTypes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/DerivedTypes.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/DerivedTypes.h (original)
+++ llvm/branches/wendling/eh/include/llvm/DerivedTypes.h Tue Oct 26 19:48:03 2010
@@ -9,7 +9,7 @@
 //
 // This file contains the declarations of classes that represent "derived
 // types".  These are things like "arrays of x" or "structure of x, y, z" or
-// "method returning x taking (y,z) as parameters", etc...
+// "function returning x taking (y,z) as parameters", etc...
 //
 // The implementations of these classes live in the Type.cpp file.
 //
@@ -19,6 +19,7 @@
 #define LLVM_DERIVED_TYPES_H
 
 #include "llvm/Type.h"
+#include "llvm/System/DataTypes.h"
 
 namespace llvm {
 
@@ -27,7 +28,6 @@
 class FunctionValType;
 class ArrayValType;
 class StructValType;
-class UnionValType;
 class PointerValType;
 class VectorValType;
 class IntegerValType;
@@ -226,8 +226,7 @@
     return T->getTypeID() == ArrayTyID ||
            T->getTypeID() == StructTyID ||
            T->getTypeID() == PointerTyID ||
-           T->getTypeID() == VectorTyID ||
-           T->getTypeID() == UnionTyID;
+           T->getTypeID() == VectorTyID;
   }
 };
 
@@ -298,64 +297,6 @@
   bool isPacked() const { return (0 != getSubclassData()) ? true : false; }
 };
 
-
-/// UnionType - Class to represent union types. A union type is similar to
-/// a structure, except that all member fields begin at offset 0.
-///
-class UnionType : public CompositeType {
-  friend class TypeMap<UnionValType, UnionType>;
-  UnionType(const UnionType &);                   // Do not implement
-  const UnionType &operator=(const UnionType &);  // Do not implement
-  UnionType(LLVMContext &C, const Type* const* Types, unsigned NumTypes);
-public:
-  /// UnionType::get - This static method is the primary way to create a
-  /// UnionType.
-  static UnionType *get(const Type* const* Types, unsigned NumTypes);
-
-  /// UnionType::get - This static method is a convenience method for
-  /// creating union types by specifying the elements as arguments.
-  static UnionType *get(const Type *type, ...) END_WITH_NULL;
-
-  /// isValidElementType - Return true if the specified type is valid as a
-  /// element type.
-  static bool isValidElementType(const Type *ElemTy);
-  
-  /// Given an element type, return the member index of that type, or -1
-  /// if there is no such member type.
-  int getElementTypeIndex(const Type *ElemTy) const;
-
-  // Iterator access to the elements
-  typedef Type::subtype_iterator element_iterator;
-  element_iterator element_begin() const { return ContainedTys; }
-  element_iterator element_end() const { return &ContainedTys[NumContainedTys];}
-
-  // Random access to the elements
-  unsigned getNumElements() const { return NumContainedTys; }
-  const Type *getElementType(unsigned N) const {
-    assert(N < NumContainedTys && "Element number out of range!");
-    return ContainedTys[N];
-  }
-
-  /// getTypeAtIndex - Given an index value into the type, return the type of
-  /// the element.  For a union type, this must be a constant value...
-  ///
-  virtual const Type *getTypeAtIndex(const Value *V) const;
-  virtual const Type *getTypeAtIndex(unsigned Idx) const;
-  virtual bool indexValid(const Value *V) const;
-  virtual bool indexValid(unsigned Idx) const;
-
-  // Implement the AbstractTypeUser interface.
-  virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
-  virtual void typeBecameConcrete(const DerivedType *AbsTy);
-
-  // Methods for support type inquiry through isa, cast, and dyn_cast:
-  static inline bool classof(const UnionType *) { return true; }
-  static inline bool classof(const Type *T) {
-    return T->getTypeID() == UnionTyID;
-  }
-};
-
-
 /// SequentialType - This is the superclass of the array, pointer and vector
 /// type classes.  All of these represent "arrays" in memory.  The array type
 /// represents a specifically sized array, pointer types are unsized/unknown

Modified: llvm/branches/wendling/eh/include/llvm/ExecutionEngine/ExecutionEngine.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/ExecutionEngine/ExecutionEngine.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/ExecutionEngine/ExecutionEngine.h (original)
+++ llvm/branches/wendling/eh/include/llvm/ExecutionEngine/ExecutionEngine.h Tue Oct 26 19:48:03 2010
@@ -126,10 +126,12 @@
   /// pointer is invoked to create it. If this returns null, the JIT will abort.
   void* (*LazyFunctionCreator)(const std::string &);
   
-  /// ExceptionTableRegister - If Exception Handling is set, the JIT will 
-  /// register dwarf tables with this function
+  /// ExceptionTableRegister - If Exception Handling is set, the JIT will
+  /// register dwarf tables with this function.
   typedef void (*EERegisterFn)(void*);
-  static EERegisterFn ExceptionTableRegister;
+  EERegisterFn ExceptionTableRegister;
+  EERegisterFn ExceptionTableDeregister;
+  std::vector<void*> AllExceptionTables;
 
 public:
   /// lock - This lock is protects the ExecutionEngine, JIT, JITResolver and
@@ -373,17 +375,26 @@
   
   /// InstallExceptionTableRegister - The JIT will use the given function
   /// to register the exception tables it generates.
-  static void InstallExceptionTableRegister(void (*F)(void*)) {
+  void InstallExceptionTableRegister(EERegisterFn F) {
     ExceptionTableRegister = F;
   }
+  void InstallExceptionTableDeregister(EERegisterFn F) {
+    ExceptionTableDeregister = F;
+  }
   
   /// RegisterTable - Registers the given pointer as an exception table. It uses
   /// the ExceptionTableRegister function.
-  static void RegisterTable(void* res) {
-    if (ExceptionTableRegister)
+  void RegisterTable(void* res) {
+    if (ExceptionTableRegister) {
       ExceptionTableRegister(res);
+      AllExceptionTables.push_back(res);
+    }
   }
 
+  /// DeregisterAllTables - Deregisters all previously registered pointers to an
+  /// exception tables. It uses the ExceptionTableoDeregister function.
+  void DeregisterAllTables();
+
 protected:
   explicit ExecutionEngine(Module *M);
 

Modified: llvm/branches/wendling/eh/include/llvm/Function.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Function.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Function.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Function.h Tue Oct 26 19:48:03 2010
@@ -152,7 +152,7 @@
   /// The particular intrinsic functions which correspond to this value are
   /// defined in llvm/Intrinsics.h.
   ///
-  unsigned getIntrinsicID() const ATTRIBUTE_READONLY;
+  unsigned getIntrinsicID() const LLVM_ATTRIBUTE_READONLY;
   bool isIntrinsic() const { return getIntrinsicID() != 0; }
 
   /// getCallingConv()/setCallingConv(CC) - These method get and set the

Modified: llvm/branches/wendling/eh/include/llvm/GlobalValue.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/GlobalValue.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/GlobalValue.h (original)
+++ llvm/branches/wendling/eh/include/llvm/GlobalValue.h Tue Oct 26 19:48:03 2010
@@ -41,6 +41,8 @@
     PrivateLinkage,     ///< Like Internal, but omit from symbol table.
     LinkerPrivateLinkage, ///< Like Private, but linker removes.
     LinkerPrivateWeakLinkage, ///< Like LinkerPrivate, but weak.
+    LinkerPrivateWeakDefAutoLinkage, ///< Like LinkerPrivateWeak, but possibly
+                                     ///  hidden.
     DLLImportLinkage,   ///< Function to be imported from DLL
     DLLExportLinkage,   ///< Function to be accessible from DLL.
     ExternalWeakLinkage,///< ExternalWeak linkage description.
@@ -137,9 +139,13 @@
   static bool isLinkerPrivateWeakLinkage(LinkageTypes Linkage) {
     return Linkage == LinkerPrivateWeakLinkage;
   }
+  static bool isLinkerPrivateWeakDefAutoLinkage(LinkageTypes Linkage) {
+    return Linkage == LinkerPrivateWeakDefAutoLinkage;
+  }
   static bool isLocalLinkage(LinkageTypes Linkage) {
     return isInternalLinkage(Linkage) || isPrivateLinkage(Linkage) ||
-      isLinkerPrivateLinkage(Linkage) || isLinkerPrivateWeakLinkage(Linkage);
+      isLinkerPrivateLinkage(Linkage) || isLinkerPrivateWeakLinkage(Linkage) ||
+      isLinkerPrivateWeakDefAutoLinkage(Linkage);
   }
   static bool isDLLImportLinkage(LinkageTypes Linkage) {
     return Linkage == DLLImportLinkage;
@@ -158,24 +164,26 @@
   /// by something non-equivalent at link time.  For example, if a function has
   /// weak linkage then the code defining it may be replaced by different code.
   static bool mayBeOverridden(LinkageTypes Linkage) {
-    return (Linkage == WeakAnyLinkage ||
-            Linkage == LinkOnceAnyLinkage ||
-            Linkage == CommonLinkage ||
-            Linkage == ExternalWeakLinkage ||
-            Linkage == LinkerPrivateWeakLinkage);
+    return Linkage == WeakAnyLinkage ||
+           Linkage == LinkOnceAnyLinkage ||
+           Linkage == CommonLinkage ||
+           Linkage == ExternalWeakLinkage ||
+           Linkage == LinkerPrivateWeakLinkage ||
+           Linkage == LinkerPrivateWeakDefAutoLinkage;
   }
 
   /// isWeakForLinker - Whether the definition of this global may be replaced at
   /// link time.
   static bool isWeakForLinker(LinkageTypes Linkage)  {
-    return (Linkage == AvailableExternallyLinkage ||
-            Linkage == WeakAnyLinkage ||
-            Linkage == WeakODRLinkage ||
-            Linkage == LinkOnceAnyLinkage ||
-            Linkage == LinkOnceODRLinkage ||
-            Linkage == CommonLinkage ||
-            Linkage == ExternalWeakLinkage ||
-            Linkage == LinkerPrivateWeakLinkage);
+    return Linkage == AvailableExternallyLinkage ||
+           Linkage == WeakAnyLinkage ||
+           Linkage == WeakODRLinkage ||
+           Linkage == LinkOnceAnyLinkage ||
+           Linkage == LinkOnceODRLinkage ||
+           Linkage == CommonLinkage ||
+           Linkage == ExternalWeakLinkage ||
+           Linkage == LinkerPrivateWeakLinkage ||
+           Linkage == LinkerPrivateWeakDefAutoLinkage;
   }
 
   bool hasExternalLinkage() const { return isExternalLinkage(Linkage); }
@@ -195,6 +203,9 @@
   bool hasLinkerPrivateWeakLinkage() const {
     return isLinkerPrivateWeakLinkage(Linkage);
   }
+  bool hasLinkerPrivateWeakDefAutoLinkage() const {
+    return isLinkerPrivateWeakDefAutoLinkage(Linkage);
+  }
   bool hasLocalLinkage() const { return isLocalLinkage(Linkage); }
   bool hasDLLImportLinkage() const { return isDLLImportLinkage(Linkage); }
   bool hasDLLExportLinkage() const { return isDLLExportLinkage(Linkage); }

Modified: llvm/branches/wendling/eh/include/llvm/GlobalVariable.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/GlobalVariable.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/GlobalVariable.h (original)
+++ llvm/branches/wendling/eh/include/llvm/GlobalVariable.h Tue Oct 26 19:48:03 2010
@@ -68,7 +68,7 @@
   /// Provide fast operand accessors
   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
 
-  /// isDeclaration - Is this global variable lacking an initializer?  If so, 
+  /// isDeclaration - Is this global variable lacking an initializer?  If so,
   /// the global variable is defined in some other translation unit, and is thus
   /// only a declaration here.
   virtual bool isDeclaration() const { return getNumOperands() == 0; }
@@ -80,7 +80,21 @@
   inline bool hasInitializer() const { return !isDeclaration(); }
 
   /// hasDefinitiveInitializer - Whether the global variable has an initializer,
-  /// and this is the initializer that will be used in the final executable.
+  /// and any other instances of the global (this can happen due to weak
+  /// linkage) are guaranteed to have the same initializer.
+  ///
+  /// Note that if you want to transform a global, you must use
+  /// hasUniqueInitializer() instead, because of the *_odr linkage type.
+  ///
+  /// Example:
+  ///
+  /// @a = global SomeType* null - Initializer is both definitive and unique.
+  ///
+  /// @b = global weak SomeType* null - Initializer is neither definitive nor
+  /// unique.
+  ///
+  /// @c = global weak_odr SomeType* null - Initializer is definitive, but not
+  /// unique.
   inline bool hasDefinitiveInitializer() const {
     return hasInitializer() &&
       // The initializer of a global variable with weak linkage may change at
@@ -88,6 +102,19 @@
       !mayBeOverridden();
   }
 
+  /// hasUniqueInitializer - Whether the global variable has an initializer, and
+  /// any changes made to the initializer will turn up in the final executable.
+  inline bool hasUniqueInitializer() const {
+    return hasInitializer() &&
+      // It's not safe to modify initializers of global variables with weak
+      // linkage, because the linker might choose to discard the initializer and
+      // use the initializer from another instance of the global variable
+      // instead. It is wrong to modify the initializer of a global variable
+      // with *_odr linkage because then different instances of the global may
+      // have different initializers, breaking the One Definition Rule.
+      !isWeakForLinker();
+  }
+
   /// getInitializer - Return the initializer for this global variable.  It is
   /// illegal to call this method if the global is external, because we cannot
   /// tell what the value is initialized to!

Modified: llvm/branches/wendling/eh/include/llvm/InlineAsm.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/InlineAsm.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/InlineAsm.h (original)
+++ llvm/branches/wendling/eh/include/llvm/InlineAsm.h Tue Oct 26 19:48:03 2010
@@ -87,6 +87,19 @@
     isClobber           // '~x'
   };
   
+  struct SubConstraintInfo {
+    /// MatchingInput - If this is not -1, this is an output constraint where an
+    /// input constraint is required to match it (e.g. "0").  The value is the
+    /// constraint number that matches this one (for example, if this is
+    /// constraint #0 and constraint #4 has the value "0", this will be 4).
+    signed char MatchingInput;
+    /// Code - The constraint code, either the register name (in braces) or the
+    /// constraint letter/number.
+    std::vector<std::string> Codes;
+    /// Default constructor.
+    SubConstraintInfo() : MatchingInput(-1) {}
+  };
+  
   struct ConstraintInfo {
     /// Type - The basic type of the constraint: input/output/clobber
     ///
@@ -120,11 +133,31 @@
     /// constraint letter/number.
     std::vector<std::string> Codes;
     
+    /// isMultipleAlternative - '|': has multiple-alternative constraints.
+    bool isMultipleAlternative;
+    
+    /// multipleAlternatives - If there are multiple alternative constraints,
+    /// this array will contain them.  Otherwise it will be empty.
+    std::vector<SubConstraintInfo> multipleAlternatives;
+    
+    /// The currently selected alternative constraint index.
+    unsigned currentAlternativeIndex;
+    
+    ///Default constructor.
+    ConstraintInfo();
+    
+    /// Copy constructor.
+    ConstraintInfo(const ConstraintInfo &other);
+    
     /// Parse - Analyze the specified string (e.g. "=*&{eax}") and fill in the
     /// fields in this structure.  If the constraint string is not understood,
     /// return true, otherwise return false.
     bool Parse(StringRef Str, 
                std::vector<InlineAsm::ConstraintInfo> &ConstraintsSoFar);
+               
+    /// selectAlternative - Point this constraint to the alternative constraint
+    /// indicated by the index.
+    void selectAlternative(unsigned index);
   };
   
   /// ParseConstraints - Split up the constraint string into the specific

Modified: llvm/branches/wendling/eh/include/llvm/Instructions.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Instructions.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Instructions.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Instructions.h Tue Oct 26 19:48:03 2010
@@ -941,28 +941,8 @@
                                unsigned(isTC));
   }
 
-  /// @deprecated these "define hacks" will go away soon
-  /// @brief coerce out-of-tree code to abandon the low-level interfaces
-  /// @detail see below comments and update your code to high-level interfaces
-  ///    - getOperand(0)  --->  getCalledValue(), or possibly getCalledFunction
-  ///    - setOperand(0, V)  --->  setCalledFunction(V)
-  ///
-  ///    in LLVM v2.8-only code
-  ///    - getOperand(N+1)  --->  getArgOperand(N)
-  ///    - setOperand(N+1, V)  --->  setArgOperand(N, V)
-  ///    - getNumOperands()  --->  getNumArgOperands()+1  // note the "+1"!
-  ///
-  ///    in backward compatible code please consult llvm/Support/CallSite.h,
-  ///    you should create a callsite using the CallInst pointer and call its
-  ///    methods
-  ///
-# define public private
-# define protected private
   /// Provide fast operand accessors
   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
-# undef public
-# undef protected
-public:
 
   /// getNumArgOperands - Return the number of call arguments.
   ///
@@ -1072,6 +1052,11 @@
   void setCalledFunction(Value* Fn) {
     Op<-1>() = Fn;
   }
+  
+  /// isInlineAsm - Check if this call is an inline asm statement.
+  bool isInlineAsm() const {
+    return isa<InlineAsm>(Op<-1>());
+  }
 
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const CallInst *) { return true; }
@@ -1222,6 +1207,10 @@
     setName(NameStr);
   }
 
+  Value *getPointerOperand() { return getOperand(0); }
+  const Value *getPointerOperand() const { return getOperand(0); }
+  static unsigned getPointerOperandIndex() { return 0U; }
+
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const VAArgInst *) { return true; }
   static inline bool classof(const Instruction *I) {
@@ -2000,11 +1989,9 @@
   /// Provide fast operand accessors
   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
 
-  /// Convenience accessor
-  Value *getReturnValue(unsigned n = 0) const {
-    return n < getNumOperands()
-      ? getOperand(n)
-      : 0;
+  /// Convenience accessor. Returns null if there is no return value.
+  Value *getReturnValue() const {
+    return getNumOperands() != 0 ? getOperand(0) : 0;
   }
 
   unsigned getNumSuccessors() const { return 0; }

Modified: llvm/branches/wendling/eh/include/llvm/IntrinsicInst.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/IntrinsicInst.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/IntrinsicInst.h (original)
+++ llvm/branches/wendling/eh/include/llvm/IntrinsicInst.h Tue Oct 26 19:48:03 2010
@@ -269,6 +269,20 @@
     }
   };
 
+  /// EHExceptionInst - This represents the llvm.eh.exception instruction.
+  ///
+  class EHExceptionInst : public IntrinsicInst {
+  public:
+    // Methods for support type inquiry through isa, cast, and dyn_cast:
+    static inline bool classof(const EHExceptionInst *) { return true; }
+    static inline bool classof(const IntrinsicInst *I) {
+      return I->getIntrinsicID() == Intrinsic::eh_exception;
+    }
+    static inline bool classof(const Value *V) {
+      return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
+    }
+  };
+
   /// EHSelectorInst - This represents the llvm.eh.selector instruction.
   ///
   class EHSelectorInst : public IntrinsicInst {

Modified: llvm/branches/wendling/eh/include/llvm/Intrinsics.td
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Intrinsics.td?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Intrinsics.td (original)
+++ llvm/branches/wendling/eh/include/llvm/Intrinsics.td Tue Oct 26 19:48:03 2010
@@ -19,10 +19,11 @@
 
 class IntrinsicProperty;
 
-// Intr*Mem - Memory properties.  An intrinsic is allowed to have exactly one of
+// Intr*Mem - Memory properties.  An intrinsic is allowed to have at most one of
 // these properties set.  They are listed from the most aggressive (best to use
 // if correct) to the least aggressive.  If no property is set, the worst case
-// is assumed (IntrWriteMem).
+// is assumed (it may read and write any memory it can get access to and it may
+// have other side effects).
 
 // IntrNoMem - The intrinsic does not access memory or have any other side
 // effects.  It may be CSE'd deleted if dead, etc.
@@ -37,15 +38,11 @@
 // deleted if dead.
 def IntrReadMem : IntrinsicProperty;
 
-// IntrWriteArgMem - This intrinsic reads and writes only from memory that one
-// of its arguments points to, but may access an unspecified amount.  The reads
-// and writes may be volatile, but except for this it has no other side effects.
-def IntrWriteArgMem : IntrinsicProperty;
-
-// IntrWriteMem - This intrinsic may read or modify unspecified memory or has
-// other side effects.  It cannot be modified by the optimizer.  This is the
-// default if the intrinsic has no other Intr*Mem property.
-def IntrWriteMem : IntrinsicProperty;
+// IntrReadWriteArgMem - This intrinsic reads and writes only from memory that
+// one of its arguments points to, but may access an unspecified amount.  The
+// reads and writes may be volatile, but except for this it has no other side
+// effects.
+def IntrReadWriteArgMem : IntrinsicProperty;
 
 // Commutative - This intrinsic is commutative: X op Y == Y op X.
 def Commutative : IntrinsicProperty;
@@ -112,12 +109,15 @@
 def llvm_descriptor_ty : LLVMPointerType<llvm_empty_ty>;          // { }*
 def llvm_metadata_ty   : LLVMType<MetadataVT>;                    // !{...}
 
+def llvm_x86mmx_ty     : LLVMType<x86mmx>;
+def llvm_ptrx86mmx_ty  : LLVMPointerType<llvm_x86mmx_ty>;         // <1 x i64>*
+
 def llvm_v2i8_ty       : LLVMType<v2i8>;     //  2 x i8
 def llvm_v4i8_ty       : LLVMType<v4i8>;     //  4 x i8
 def llvm_v8i8_ty       : LLVMType<v8i8>;     //  8 x i8
 def llvm_v16i8_ty      : LLVMType<v16i8>;    // 16 x i8
 def llvm_v32i8_ty      : LLVMType<v32i8>;    // 32 x i8
-def llvm_v2i16_ty      : LLVMType<v2i16>;    //  4 x i16
+def llvm_v2i16_ty      : LLVMType<v2i16>;    //  2 x i16
 def llvm_v4i16_ty      : LLVMType<v4i16>;    //  4 x i16
 def llvm_v8i16_ty      : LLVMType<v8i16>;    //  8 x i16
 def llvm_v16i16_ty     : LLVMType<v16i16>;   // 16 x i16
@@ -190,7 +190,7 @@
                             [IntrReadArgMem]>;
 def int_gcwrite : Intrinsic<[],
                             [llvm_ptr_ty, llvm_ptr_ty, llvm_ptrptr_ty],
-                            [IntrWriteArgMem, NoCapture<1>, NoCapture<2>]>;
+                            [IntrReadWriteArgMem, NoCapture<1>, NoCapture<2>]>;
 
 //===--------------------- Code Generator Intrinsics ----------------------===//
 //
@@ -204,21 +204,19 @@
 def int_stackrestore  : Intrinsic<[], [llvm_ptr_ty]>,
                         GCCBuiltin<"__builtin_stack_restore">;
 
-// IntrWriteArgMem is more pessimistic than strictly necessary for prefetch,
+// IntrReadWriteArgMem is more pessimistic than strictly necessary for prefetch,
 // however it does conveniently prevent the prefetch from being reordered
 // with respect to nearby accesses to the same memory.
 def int_prefetch      : Intrinsic<[],
                                   [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
-                                  [IntrWriteArgMem, NoCapture<0>]>;
+                                  [IntrReadWriteArgMem, NoCapture<0>]>;
 def int_pcmarker      : Intrinsic<[], [llvm_i32_ty]>;
 
 def int_readcyclecounter : Intrinsic<[llvm_i64_ty]>;
 
 // Stack Protector Intrinsic - The stackprotector intrinsic writes the stack
 // guard to the correct place on the stack frame.
-def int_stackprotector : Intrinsic<[],
-                                   [llvm_ptr_ty, llvm_ptrptr_ty],
-                                   [IntrWriteMem]>;
+def int_stackprotector : Intrinsic<[], [llvm_ptr_ty, llvm_ptrptr_ty], []>;
 
 //===------------------- Standard C Library Intrinsics --------------------===//
 //
@@ -226,15 +224,15 @@
 def int_memcpy  : Intrinsic<[],
                              [llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty,
                               llvm_i32_ty, llvm_i1_ty],
-                            [IntrWriteArgMem, NoCapture<0>, NoCapture<1>]>;
+                            [IntrReadWriteArgMem, NoCapture<0>, NoCapture<1>]>;
 def int_memmove : Intrinsic<[],
                             [llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty,
                              llvm_i32_ty, llvm_i1_ty],
-                            [IntrWriteArgMem, NoCapture<0>, NoCapture<1>]>;
+                            [IntrReadWriteArgMem, NoCapture<0>, NoCapture<1>]>;
 def int_memset  : Intrinsic<[],
                             [llvm_anyptr_ty, llvm_i8_ty, llvm_anyint_ty,
                              llvm_i32_ty, llvm_i1_ty],
-                            [IntrWriteArgMem, NoCapture<0>]>;
+                            [IntrReadWriteArgMem, NoCapture<0>]>;
 
 // These functions do not actually read memory, but they are sensitive to the
 // rounding mode.  This needs to be modelled separately; in the meantime
@@ -313,6 +311,7 @@
   def int_eh_sjlj_lsda    : Intrinsic<[llvm_ptr_ty]>;
   def int_eh_sjlj_callsite: Intrinsic<[], [llvm_i32_ty]>;
 }
+def int_eh_sjlj_dispatch_setup : Intrinsic<[], [llvm_ptr_ty]>;
 def int_eh_sjlj_setjmp  : Intrinsic<[llvm_i32_ty], [llvm_ptr_ty]>;
 def int_eh_sjlj_longjmp : Intrinsic<[], [llvm_ptr_ty]>;
 
@@ -335,7 +334,7 @@
 //
 def int_init_trampoline : Intrinsic<[llvm_ptr_ty],
                                     [llvm_ptr_ty, llvm_ptr_ty, llvm_ptr_ty],
-                                    [IntrWriteArgMem]>,
+                                    [IntrReadWriteArgMem]>,
                           GCCBuiltin<"__builtin_init_trampoline">;
 
 //===------------------------ Overflow Intrinsics -------------------------===//
@@ -373,79 +372,79 @@
 def int_atomic_cmp_swap : Intrinsic<[llvm_anyint_ty],
                                     [LLVMAnyPointerType<LLVMMatchType<0>>,
                                      LLVMMatchType<0>, LLVMMatchType<0>],
-                                    [IntrWriteArgMem, NoCapture<0>]>,
+                                    [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_val_compare_and_swap">;
 def int_atomic_load_add : Intrinsic<[llvm_anyint_ty],
                                     [LLVMAnyPointerType<LLVMMatchType<0>>,
                                      LLVMMatchType<0>],
-                                    [IntrWriteArgMem, NoCapture<0>]>,
+                                    [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_add">;
 def int_atomic_swap     : Intrinsic<[llvm_anyint_ty],
                                     [LLVMAnyPointerType<LLVMMatchType<0>>,
                                      LLVMMatchType<0>],
-                                    [IntrWriteArgMem, NoCapture<0>]>,
+                                    [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_lock_test_and_set">;
 def int_atomic_load_sub : Intrinsic<[llvm_anyint_ty],
                                     [LLVMAnyPointerType<LLVMMatchType<0>>,
                                      LLVMMatchType<0>],
-                                    [IntrWriteArgMem, NoCapture<0>]>,
+                                    [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_sub">;
 def int_atomic_load_and : Intrinsic<[llvm_anyint_ty],
                                     [LLVMAnyPointerType<LLVMMatchType<0>>,
                                      LLVMMatchType<0>],
-                                    [IntrWriteArgMem, NoCapture<0>]>,
+                                    [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_and">;
 def int_atomic_load_or   : Intrinsic<[llvm_anyint_ty],
                                      [LLVMAnyPointerType<LLVMMatchType<0>>,
                                       LLVMMatchType<0>],
-                                     [IntrWriteArgMem, NoCapture<0>]>,
+                                     [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_or">;
 def int_atomic_load_xor : Intrinsic<[llvm_anyint_ty],
                                     [LLVMAnyPointerType<LLVMMatchType<0>>,
                                      LLVMMatchType<0>],
-                                    [IntrWriteArgMem, NoCapture<0>]>,
+                                    [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_xor">;
 def int_atomic_load_nand : Intrinsic<[llvm_anyint_ty],
                                      [LLVMAnyPointerType<LLVMMatchType<0>>,
                                       LLVMMatchType<0>],
-                                     [IntrWriteArgMem, NoCapture<0>]>,
+                                     [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_nand">;
 def int_atomic_load_min  : Intrinsic<[llvm_anyint_ty],
                                      [LLVMAnyPointerType<LLVMMatchType<0>>,
                                       LLVMMatchType<0>],
-                                     [IntrWriteArgMem, NoCapture<0>]>,
+                                     [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_min">;
 def int_atomic_load_max  : Intrinsic<[llvm_anyint_ty],
                                      [LLVMAnyPointerType<LLVMMatchType<0>>,
                                       LLVMMatchType<0>],
-                                     [IntrWriteArgMem, NoCapture<0>]>,
+                                     [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_max">;
 def int_atomic_load_umin : Intrinsic<[llvm_anyint_ty],
                                      [LLVMAnyPointerType<LLVMMatchType<0>>,
                                       LLVMMatchType<0>],
-                                     [IntrWriteArgMem, NoCapture<0>]>,
+                                     [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_umin">;
 def int_atomic_load_umax : Intrinsic<[llvm_anyint_ty],
                                      [LLVMAnyPointerType<LLVMMatchType<0>>,
                                       LLVMMatchType<0>],
-                                     [IntrWriteArgMem, NoCapture<0>]>,
+                                     [IntrReadWriteArgMem, NoCapture<0>]>,
                            GCCBuiltin<"__sync_fetch_and_umax">;
 
 //===------------------------- Memory Use Markers -------------------------===//
 //
 def int_lifetime_start  : Intrinsic<[],
                                     [llvm_i64_ty, llvm_ptr_ty],
-                                    [IntrWriteArgMem, NoCapture<1>]>;
+                                    [IntrReadWriteArgMem, NoCapture<1>]>;
 def int_lifetime_end    : Intrinsic<[],
                                     [llvm_i64_ty, llvm_ptr_ty],
-                                    [IntrWriteArgMem, NoCapture<1>]>;
+                                    [IntrReadWriteArgMem, NoCapture<1>]>;
 def int_invariant_start : Intrinsic<[llvm_descriptor_ty],
                                     [llvm_i64_ty, llvm_ptr_ty],
                                     [IntrReadArgMem, NoCapture<1>]>;
 def int_invariant_end   : Intrinsic<[],
                                     [llvm_descriptor_ty, llvm_i64_ty,
                                      llvm_ptr_ty],
-                                    [IntrWriteArgMem, NoCapture<2>]>;
+                                    [IntrReadWriteArgMem, NoCapture<2>]>;
 
 //===-------------------------- Other Intrinsics --------------------------===//
 //

Modified: llvm/branches/wendling/eh/include/llvm/IntrinsicsARM.td
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/IntrinsicsARM.td?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/IntrinsicsARM.td (original)
+++ llvm/branches/wendling/eh/include/llvm/IntrinsicsARM.td Tue Oct 26 19:48:03 2010
@@ -36,6 +36,20 @@
 }
 
 //===----------------------------------------------------------------------===//
+// VFP
+
+let TargetPrefix = "arm" in {  // All intrinsics start with "llvm.arm.".
+  def int_arm_get_fpscr : GCCBuiltin<"__builtin_arm_get_fpscr">, 
+                         Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>;
+  def int_arm_set_fpscr : GCCBuiltin<"__builtin_arm_set_fpscr">, 
+                         Intrinsic<[], [llvm_i32_ty], []>;
+  def int_arm_vcvtr     : Intrinsic<[llvm_float_ty], [llvm_anyfloat_ty],
+                                    [IntrNoMem]>;
+  def int_arm_vcvtru    : Intrinsic<[llvm_float_ty], [llvm_anyfloat_ty],
+                                    [IntrNoMem]>;
+}
+
+//===----------------------------------------------------------------------===//
 // Advanced SIMD (NEON)
 
 let TargetPrefix = "arm" in {  // All intrinsics start with "llvm.arm.".
@@ -46,9 +60,6 @@
   class Neon_1Arg_Narrow_Intrinsic
     : Intrinsic<[llvm_anyvector_ty],
                 [LLVMExtendedElementVectorType<0>], [IntrNoMem]>;
-  class Neon_1Arg_Long_Intrinsic
-    : Intrinsic<[llvm_anyvector_ty],
-                [LLVMTruncatedElementVectorType<0>], [IntrNoMem]>;
   class Neon_2Arg_Intrinsic
     : Intrinsic<[llvm_anyvector_ty], [LLVMMatchType<0>, LLVMMatchType<0>],
                 [IntrNoMem]>;
@@ -62,10 +73,6 @@
                 [LLVMTruncatedElementVectorType<0>,
                  LLVMTruncatedElementVectorType<0>],
                 [IntrNoMem]>;
-  class Neon_2Arg_Wide_Intrinsic
-    : Intrinsic<[llvm_anyvector_ty],
-                [LLVMMatchType<0>, LLVMTruncatedElementVectorType<0>],
-                [IntrNoMem]>;
   class Neon_3Arg_Intrinsic
     : Intrinsic<[llvm_anyvector_ty],
                 [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>],
@@ -117,25 +124,13 @@
   def int_arm_neon_vqaddu : Neon_2Arg_Intrinsic;
   def int_arm_neon_vaddhn : Neon_2Arg_Narrow_Intrinsic;
   def int_arm_neon_vraddhn : Neon_2Arg_Narrow_Intrinsic;
-  def int_arm_neon_vaddls : Neon_2Arg_Long_Intrinsic;
-  def int_arm_neon_vaddlu : Neon_2Arg_Long_Intrinsic;
-  def int_arm_neon_vaddws : Neon_2Arg_Wide_Intrinsic;
-  def int_arm_neon_vaddwu : Neon_2Arg_Wide_Intrinsic;
 
   // Vector Multiply.
   def int_arm_neon_vmulp : Neon_2Arg_Intrinsic;
   def int_arm_neon_vqdmulh : Neon_2Arg_Intrinsic;
   def int_arm_neon_vqrdmulh : Neon_2Arg_Intrinsic;
-  def int_arm_neon_vmulls : Neon_2Arg_Long_Intrinsic;
-  def int_arm_neon_vmullu : Neon_2Arg_Long_Intrinsic;
   def int_arm_neon_vmullp : Neon_2Arg_Long_Intrinsic;
   def int_arm_neon_vqdmull : Neon_2Arg_Long_Intrinsic;
-
-  // Vector Multiply and Accumulate/Subtract.
-  def int_arm_neon_vmlals : Neon_3Arg_Long_Intrinsic;
-  def int_arm_neon_vmlalu : Neon_3Arg_Long_Intrinsic;
-  def int_arm_neon_vmlsls : Neon_3Arg_Long_Intrinsic;
-  def int_arm_neon_vmlslu : Neon_3Arg_Long_Intrinsic;
   def int_arm_neon_vqdmlal : Neon_3Arg_Long_Intrinsic;
   def int_arm_neon_vqdmlsl : Neon_3Arg_Long_Intrinsic;
 
@@ -161,10 +156,6 @@
 def int_arm_neon_vqsubu : Neon_2Arg_Intrinsic;
 def int_arm_neon_vsubhn : Neon_2Arg_Narrow_Intrinsic;
 def int_arm_neon_vrsubhn : Neon_2Arg_Narrow_Intrinsic;
-def int_arm_neon_vsubls : Neon_2Arg_Long_Intrinsic;
-def int_arm_neon_vsublu : Neon_2Arg_Long_Intrinsic;
-def int_arm_neon_vsubws : Neon_2Arg_Wide_Intrinsic;
-def int_arm_neon_vsubwu : Neon_2Arg_Wide_Intrinsic;
 
 // Vector Absolute Compare.
 let TargetPrefix = "arm" in {
@@ -185,14 +176,6 @@
 // Vector Absolute Differences.
 def int_arm_neon_vabds : Neon_2Arg_Intrinsic;
 def int_arm_neon_vabdu : Neon_2Arg_Intrinsic;
-def int_arm_neon_vabdls : Neon_2Arg_Long_Intrinsic;
-def int_arm_neon_vabdlu : Neon_2Arg_Long_Intrinsic;
-
-// Vector Absolute Difference and Accumulate.
-def int_arm_neon_vabas : Neon_3Arg_Intrinsic;
-def int_arm_neon_vabau : Neon_3Arg_Intrinsic;
-def int_arm_neon_vabals : Neon_3Arg_Long_Intrinsic;
-def int_arm_neon_vabalu : Neon_3Arg_Long_Intrinsic;
 
 // Vector Pairwise Add.
 def int_arm_neon_vpadd : Neon_2Arg_Intrinsic;
@@ -303,13 +286,10 @@
 def int_arm_neon_vcvtfxs2fp : Neon_CvtFxToFP_Intrinsic;
 def int_arm_neon_vcvtfxu2fp : Neon_CvtFxToFP_Intrinsic;
 
-// Narrowing and Lengthening Vector Moves.
-def int_arm_neon_vmovn : Neon_1Arg_Narrow_Intrinsic;
+// Narrowing Saturating Vector Moves.
 def int_arm_neon_vqmovns : Neon_1Arg_Narrow_Intrinsic;
 def int_arm_neon_vqmovnu : Neon_1Arg_Narrow_Intrinsic;
 def int_arm_neon_vqmovnsu : Neon_1Arg_Narrow_Intrinsic;
-def int_arm_neon_vmovls : Neon_1Arg_Long_Intrinsic;
-def int_arm_neon_vmovlu : Neon_1Arg_Long_Intrinsic;
 
 // Vector Table Lookup.
 // The first 1-4 arguments are the table.
@@ -330,62 +310,76 @@
 let TargetPrefix = "arm" in {
 
   // De-interleaving vector loads from N-element structures.
+  // Source operands are the address and alignment.
   def int_arm_neon_vld1 : Intrinsic<[llvm_anyvector_ty],
-                                    [llvm_ptr_ty], [IntrReadArgMem]>;
+                                    [llvm_ptr_ty, llvm_i32_ty],
+                                    [IntrReadArgMem]>;
   def int_arm_neon_vld2 : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
-                                    [llvm_ptr_ty], [IntrReadArgMem]>;
+                                    [llvm_ptr_ty, llvm_i32_ty],
+                                    [IntrReadArgMem]>;
   def int_arm_neon_vld3 : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
                                      LLVMMatchType<0>],
-                                    [llvm_ptr_ty], [IntrReadArgMem]>;
+                                    [llvm_ptr_ty, llvm_i32_ty],
+                                    [IntrReadArgMem]>;
   def int_arm_neon_vld4 : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
                                      LLVMMatchType<0>, LLVMMatchType<0>],
-                                    [llvm_ptr_ty], [IntrReadArgMem]>;
+                                    [llvm_ptr_ty, llvm_i32_ty],
+                                    [IntrReadArgMem]>;
 
   // Vector load N-element structure to one lane.
+  // Source operands are: the address, the N input vectors (since only one
+  // lane is assigned), the lane number, and the alignment.
   def int_arm_neon_vld2lane : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
                                         [llvm_ptr_ty, LLVMMatchType<0>,
-                                         LLVMMatchType<0>, llvm_i32_ty],
-                                        [IntrReadArgMem]>;
+                                         LLVMMatchType<0>, llvm_i32_ty,
+                                         llvm_i32_ty], [IntrReadArgMem]>;
   def int_arm_neon_vld3lane : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
                                          LLVMMatchType<0>],
                                         [llvm_ptr_ty, LLVMMatchType<0>,
                                          LLVMMatchType<0>, LLVMMatchType<0>,
-                                         llvm_i32_ty], [IntrReadArgMem]>;
+                                         llvm_i32_ty, llvm_i32_ty],
+                                        [IntrReadArgMem]>;
   def int_arm_neon_vld4lane : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
                                          LLVMMatchType<0>, LLVMMatchType<0>],
                                         [llvm_ptr_ty, LLVMMatchType<0>,
                                          LLVMMatchType<0>, LLVMMatchType<0>,
-                                         LLVMMatchType<0>, llvm_i32_ty],
-                                        [IntrReadArgMem]>;
+                                         LLVMMatchType<0>, llvm_i32_ty,
+                                         llvm_i32_ty], [IntrReadArgMem]>;
 
   // Interleaving vector stores from N-element structures.
+  // Source operands are: the address, the N vectors, and the alignment.
   def int_arm_neon_vst1 : Intrinsic<[],
-                                    [llvm_ptr_ty, llvm_anyvector_ty],
-                                    [IntrWriteArgMem]>;
+                                    [llvm_ptr_ty, llvm_anyvector_ty,
+                                     llvm_i32_ty], [IntrReadWriteArgMem]>;
   def int_arm_neon_vst2 : Intrinsic<[],
                                     [llvm_ptr_ty, llvm_anyvector_ty,
-                                     LLVMMatchType<0>], [IntrWriteArgMem]>;
+                                     LLVMMatchType<0>, llvm_i32_ty],
+                                    [IntrReadWriteArgMem]>;
   def int_arm_neon_vst3 : Intrinsic<[],
                                     [llvm_ptr_ty, llvm_anyvector_ty,
-                                     LLVMMatchType<0>, LLVMMatchType<0>],
-                                     [IntrWriteArgMem]>;
+                                     LLVMMatchType<0>, LLVMMatchType<0>,
+                                     llvm_i32_ty], [IntrReadWriteArgMem]>;
   def int_arm_neon_vst4 : Intrinsic<[],
                                     [llvm_ptr_ty, llvm_anyvector_ty,
                                      LLVMMatchType<0>, LLVMMatchType<0>,
-                                     LLVMMatchType<0>], [IntrWriteArgMem]>;
+                                     LLVMMatchType<0>, llvm_i32_ty],
+                                    [IntrReadWriteArgMem]>;
 
   // Vector store N-element structure from one lane.
+  // Source operands are: the address, the N vectors, the lane number, and
+  // the alignment.
   def int_arm_neon_vst2lane : Intrinsic<[],
                                         [llvm_ptr_ty, llvm_anyvector_ty,
-                                         LLVMMatchType<0>, llvm_i32_ty],
-                                        [IntrWriteArgMem]>;
+                                         LLVMMatchType<0>, llvm_i32_ty,
+                                         llvm_i32_ty], [IntrReadWriteArgMem]>;
   def int_arm_neon_vst3lane : Intrinsic<[],
                                         [llvm_ptr_ty, llvm_anyvector_ty,
                                          LLVMMatchType<0>, LLVMMatchType<0>,
-                                         llvm_i32_ty], [IntrWriteArgMem]>;
+                                         llvm_i32_ty, llvm_i32_ty],
+                                        [IntrReadWriteArgMem]>;
   def int_arm_neon_vst4lane : Intrinsic<[],
                                         [llvm_ptr_ty, llvm_anyvector_ty,
                                          LLVMMatchType<0>, LLVMMatchType<0>,
-                                         LLVMMatchType<0>, llvm_i32_ty],
-                                        [IntrWriteArgMem]>;
+                                         LLVMMatchType<0>, llvm_i32_ty,
+                                         llvm_i32_ty], [IntrReadWriteArgMem]>;
 }

Modified: llvm/branches/wendling/eh/include/llvm/IntrinsicsPowerPC.td
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/IntrinsicsPowerPC.td?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/IntrinsicsPowerPC.td (original)
+++ llvm/branches/wendling/eh/include/llvm/IntrinsicsPowerPC.td Tue Oct 26 19:48:03 2010
@@ -18,17 +18,17 @@
 // Non-altivec intrinsics.
 let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
   // dcba/dcbf/dcbi/dcbst/dcbt/dcbz/dcbzl(PPC970) instructions.
-  def int_ppc_dcba  : Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
-  def int_ppc_dcbf  : Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
-  def int_ppc_dcbi  : Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
-  def int_ppc_dcbst : Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
-  def int_ppc_dcbt  : Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
-  def int_ppc_dcbtst: Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
-  def int_ppc_dcbz  : Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
-  def int_ppc_dcbzl : Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
+  def int_ppc_dcba  : Intrinsic<[], [llvm_ptr_ty], []>;
+  def int_ppc_dcbf  : Intrinsic<[], [llvm_ptr_ty], []>;
+  def int_ppc_dcbi  : Intrinsic<[], [llvm_ptr_ty], []>;
+  def int_ppc_dcbst : Intrinsic<[], [llvm_ptr_ty], []>;
+  def int_ppc_dcbt  : Intrinsic<[], [llvm_ptr_ty], []>;
+  def int_ppc_dcbtst: Intrinsic<[], [llvm_ptr_ty], []>;
+  def int_ppc_dcbz  : Intrinsic<[], [llvm_ptr_ty], []>;
+  def int_ppc_dcbzl : Intrinsic<[], [llvm_ptr_ty], []>;
 
   // sync instruction
-  def int_ppc_sync : Intrinsic<[], [], [IntrWriteMem]>;
+  def int_ppc_sync : Intrinsic<[], [], []>;
 }
 
 
@@ -86,31 +86,31 @@
 let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
   // Data Stream Control.
   def int_ppc_altivec_dss : GCCBuiltin<"__builtin_altivec_dss">,
-              Intrinsic<[], [llvm_i32_ty], [IntrWriteMem]>;
+              Intrinsic<[], [llvm_i32_ty], []>;
   def int_ppc_altivec_dssall : GCCBuiltin<"__builtin_altivec_dssall">,
-              Intrinsic<[], [], [IntrWriteMem]>;
+              Intrinsic<[], [], []>;
   def int_ppc_altivec_dst : GCCBuiltin<"__builtin_altivec_dst">,
               Intrinsic<[],
                         [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
-                        [IntrWriteMem]>;
+                        []>;
   def int_ppc_altivec_dstt : GCCBuiltin<"__builtin_altivec_dstt">,
               Intrinsic<[],
                         [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
-                        [IntrWriteMem]>;
+                        []>;
   def int_ppc_altivec_dstst : GCCBuiltin<"__builtin_altivec_dstst">,
               Intrinsic<[],
                         [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
-                        [IntrWriteMem]>;
+                        []>;
   def int_ppc_altivec_dststt : GCCBuiltin<"__builtin_altivec_dststt">,
               Intrinsic<[],
                         [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
-                        [IntrWriteMem]>;
+                        []>;
 
   // VSCR access.
   def int_ppc_altivec_mfvscr : GCCBuiltin<"__builtin_altivec_mfvscr">,
               Intrinsic<[llvm_v8i16_ty], [], [IntrReadMem]>;
   def int_ppc_altivec_mtvscr : GCCBuiltin<"__builtin_altivec_mtvscr">,
-              Intrinsic<[], [llvm_v4i32_ty], [IntrWriteMem]>;
+              Intrinsic<[], [llvm_v4i32_ty], []>;
 
 
   // Loads.  These don't map directly to GCC builtins because they represent the
@@ -129,20 +129,15 @@
   // Stores.  These don't map directly to GCC builtins because they represent the
   // source address with a single pointer.
   def int_ppc_altivec_stvx :
-              Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
-                        [IntrWriteMem]>;
+              Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], []>;
   def int_ppc_altivec_stvxl :
-              Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
-                        [IntrWriteMem]>;
+              Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], []>;
   def int_ppc_altivec_stvebx :
-              Intrinsic<[], [llvm_v16i8_ty, llvm_ptr_ty],
-                        [IntrWriteMem]>;
+              Intrinsic<[], [llvm_v16i8_ty, llvm_ptr_ty], []>;
   def int_ppc_altivec_stvehx :
-              Intrinsic<[], [llvm_v8i16_ty, llvm_ptr_ty],
-                        [IntrWriteMem]>;
+              Intrinsic<[], [llvm_v8i16_ty, llvm_ptr_ty], []>;
   def int_ppc_altivec_stvewx :
-              Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
-                        [IntrWriteMem]>;
+              Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], []>;
 
   // Comparisons setting a vector.
   def int_ppc_altivec_vcmpbfp : GCCBuiltin<"__builtin_altivec_vcmpbfp">,

Modified: llvm/branches/wendling/eh/include/llvm/IntrinsicsX86.td
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/IntrinsicsX86.td?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/IntrinsicsX86.td (original)
+++ llvm/branches/wendling/eh/include/llvm/IntrinsicsX86.td Tue Oct 26 19:48:03 2010
@@ -11,6 +11,11 @@
 //
 //===----------------------------------------------------------------------===//
 
+//===----------------------------------------------------------------------===//
+// Interrupt traps
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_int : Intrinsic<[], [llvm_i8_ty]>;
+}
 
 //===----------------------------------------------------------------------===//
 // SSE1
@@ -125,12 +130,12 @@
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
                          llvm_i64_ty], [IntrNoMem]>;
   def int_x86_sse_cvtps2pi : GCCBuiltin<"__builtin_ia32_cvtps2pi">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   def int_x86_sse_cvttps2pi: GCCBuiltin<"__builtin_ia32_cvttps2pi">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   def int_x86_sse_cvtpi2ps : GCCBuiltin<"__builtin_ia32_cvtpi2ps">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_v2i32_ty], [IntrNoMem]>;
+                         llvm_x86mmx_ty], [IntrNoMem]>;
 }
 
 // SIMD load ops
@@ -143,24 +148,24 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse_storeu_ps : GCCBuiltin<"__builtin_ia32_storeups">,
               Intrinsic<[], [llvm_ptr_ty,
-                         llvm_v4f32_ty], [IntrWriteMem]>;
+                         llvm_v4f32_ty], []>;
 }
 
 // Cacheability support ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse_movnt_ps : GCCBuiltin<"__builtin_ia32_movntps">,
               Intrinsic<[], [llvm_ptr_ty,
-                         llvm_v4f32_ty], [IntrWriteMem]>;
+                         llvm_v4f32_ty], []>;
   def int_x86_sse_sfence : GCCBuiltin<"__builtin_ia32_sfence">,
-              Intrinsic<[], [], [IntrWriteMem]>;
+              Intrinsic<[], [], []>;
 }
 
 // Control register.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse_stmxcsr :
-              Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
+              Intrinsic<[], [llvm_ptr_ty], []>;
   def int_x86_sse_ldmxcsr :
-              Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
+              Intrinsic<[], [llvm_ptr_ty], []>;
 }
 
 // Misc.
@@ -440,11 +445,11 @@
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
                          llvm_v4f32_ty], [IntrNoMem]>;
   def int_x86_sse_cvtpd2pi : GCCBuiltin<"__builtin_ia32_cvtpd2pi">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   def int_x86_sse_cvttpd2pi: GCCBuiltin<"__builtin_ia32_cvttpd2pi">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   def int_x86_sse_cvtpi2pd : GCCBuiltin<"__builtin_ia32_cvtpi2pd">,
-              Intrinsic<[llvm_v2f64_ty], [llvm_v2i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_v2f64_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
 }
 
 // SIMD load ops
@@ -459,26 +464,26 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse2_storeu_pd : GCCBuiltin<"__builtin_ia32_storeupd">,
               Intrinsic<[], [llvm_ptr_ty,
-                         llvm_v2f64_ty], [IntrWriteMem]>;
+                         llvm_v2f64_ty], []>;
   def int_x86_sse2_storeu_dq : GCCBuiltin<"__builtin_ia32_storedqu">,
               Intrinsic<[], [llvm_ptr_ty,
-                         llvm_v16i8_ty], [IntrWriteMem]>;
+                         llvm_v16i8_ty], []>;
   def int_x86_sse2_storel_dq : GCCBuiltin<"__builtin_ia32_storelv4si">,
               Intrinsic<[], [llvm_ptr_ty,
-                         llvm_v4i32_ty], [IntrWriteMem]>;
+                         llvm_v4i32_ty], []>;
 }
 
 // Cacheability support ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse2_movnt_dq : GCCBuiltin<"__builtin_ia32_movntdq">,
               Intrinsic<[], [llvm_ptr_ty,
-                         llvm_v2i64_ty], [IntrWriteMem]>;
+                         llvm_v2i64_ty], []>;
   def int_x86_sse2_movnt_pd : GCCBuiltin<"__builtin_ia32_movntpd">,
               Intrinsic<[], [llvm_ptr_ty,
-                         llvm_v2f64_ty], [IntrWriteMem]>;
+                         llvm_v2f64_ty], []>;
   def int_x86_sse2_movnt_i : GCCBuiltin<"__builtin_ia32_movnti">,
               Intrinsic<[], [llvm_ptr_ty,
-                         llvm_i32_ty], [IntrWriteMem]>;
+                         llvm_i32_ty], []>;
 }
 
 // Misc.
@@ -498,13 +503,13 @@
               Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   def int_x86_sse2_maskmov_dqu : GCCBuiltin<"__builtin_ia32_maskmovdqu">,
               Intrinsic<[], [llvm_v16i8_ty,
-                         llvm_v16i8_ty, llvm_ptr_ty], [IntrWriteMem]>;
+                         llvm_v16i8_ty, llvm_ptr_ty], []>;
   def int_x86_sse2_clflush : GCCBuiltin<"__builtin_ia32_clflush">,
-              Intrinsic<[], [llvm_ptr_ty], [IntrWriteMem]>;
+              Intrinsic<[], [llvm_ptr_ty], []>;
   def int_x86_sse2_lfence : GCCBuiltin<"__builtin_ia32_lfence">,
-              Intrinsic<[], [], [IntrWriteMem]>;
+              Intrinsic<[], [], []>;
   def int_x86_sse2_mfence : GCCBuiltin<"__builtin_ia32_mfence">,
-              Intrinsic<[], [], [IntrWriteMem]>;
+              Intrinsic<[], [], []>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -546,10 +551,10 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse3_monitor : GCCBuiltin<"__builtin_ia32_monitor">,
               Intrinsic<[], [llvm_ptr_ty,
-                         llvm_i32_ty, llvm_i32_ty], [IntrWriteMem]>;
+                         llvm_i32_ty, llvm_i32_ty], []>;
   def int_x86_sse3_mwait : GCCBuiltin<"__builtin_ia32_mwait">,
               Intrinsic<[], [llvm_i32_ty,
-                         llvm_i32_ty], [IntrWriteMem]>;
+                         llvm_i32_ty], []>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -558,50 +563,50 @@
 // Horizontal arithmetic ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_ssse3_phadd_w         : GCCBuiltin<"__builtin_ia32_phaddw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_phadd_w_128     : GCCBuiltin<"__builtin_ia32_phaddw128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
                          llvm_v8i16_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_phadd_d         : GCCBuiltin<"__builtin_ia32_phaddd">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
-                         llvm_v2i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_phadd_d_128     : GCCBuiltin<"__builtin_ia32_phaddd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
                          llvm_v4i32_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_phadd_sw        : GCCBuiltin<"__builtin_ia32_phaddsw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_phadd_sw_128    : GCCBuiltin<"__builtin_ia32_phaddsw128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
                          llvm_v4i32_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_phsub_w         : GCCBuiltin<"__builtin_ia32_phsubw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_phsub_w_128     : GCCBuiltin<"__builtin_ia32_phsubw128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
                          llvm_v8i16_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_phsub_d         : GCCBuiltin<"__builtin_ia32_phsubd">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
-                         llvm_v2i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_phsub_d_128     : GCCBuiltin<"__builtin_ia32_phsubd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
                          llvm_v4i32_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_phsub_sw        : GCCBuiltin<"__builtin_ia32_phsubsw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_phsub_sw_128    : GCCBuiltin<"__builtin_ia32_phsubsw128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
                          llvm_v8i16_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_pmadd_ub_sw     : GCCBuiltin<"__builtin_ia32_pmaddubsw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_pmadd_ub_sw_128 : GCCBuiltin<"__builtin_ia32_pmaddubsw128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
                          llvm_v8i16_ty], [IntrNoMem]>;
@@ -610,8 +615,8 @@
 // Packed multiply high with round and scale
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_ssse3_pmul_hr_sw      : GCCBuiltin<"__builtin_ia32_pmulhrsw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   def int_x86_ssse3_pmul_hr_sw_128  : GCCBuiltin<"__builtin_ia32_pmulhrsw128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
@@ -620,32 +625,35 @@
 // Shuffle ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_ssse3_pshuf_b         : GCCBuiltin<"__builtin_ia32_pshufb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_pshuf_b_128     : GCCBuiltin<"__builtin_ia32_pshufb128">,
               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
                          llvm_v16i8_ty], [IntrNoMem]>;
+  def int_x86_sse_pshuf_w           : GCCBuiltin<"__builtin_ia32_pshufw">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty],
+                         [IntrNoMem]>;
 }
 
 // Sign ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_ssse3_psign_b         : GCCBuiltin<"__builtin_ia32_psignb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_psign_b_128     : GCCBuiltin<"__builtin_ia32_psignb128">,
               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
                          llvm_v16i8_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_psign_w         : GCCBuiltin<"__builtin_ia32_psignw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_psign_w_128     : GCCBuiltin<"__builtin_ia32_psignw128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
                          llvm_v8i16_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_psign_d         : GCCBuiltin<"__builtin_ia32_psignd">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
-                         llvm_v2i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_psign_d_128     : GCCBuiltin<"__builtin_ia32_psignd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
                          llvm_v4i32_ty], [IntrNoMem]>;
@@ -654,17 +662,17 @@
 // Absolute value ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_ssse3_pabs_b     : GCCBuiltin<"__builtin_ia32_pabsb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_pabs_b_128 : GCCBuiltin<"__builtin_ia32_pabsb128">,
               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_pabs_w     : GCCBuiltin<"__builtin_ia32_pabsw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_pabs_w_128 : GCCBuiltin<"__builtin_ia32_pabsw128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
 
   def int_x86_ssse3_pabs_d     : GCCBuiltin<"__builtin_ia32_pabsd">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_ssse3_pabs_d_128 : GCCBuiltin<"__builtin_ia32_pabsd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
 }
@@ -978,197 +986,599 @@
 }
 
 //===----------------------------------------------------------------------===//
+// AVX
+
+// Arithmetic ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_addsub_pd_256 : GCCBuiltin<"__builtin_ia32_addsubpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_addsub_ps_256 : GCCBuiltin<"__builtin_ia32_addsubps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty], [IntrNoMem]>;
+  def int_x86_avx_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty], [IntrNoMem]>;
+  def int_x86_avx_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty], [IntrNoMem]>;
+
+  def int_x86_avx_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
+
+  def int_x86_avx_rsqrt_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrtps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
+
+  def int_x86_avx_rcp_ps_256 : GCCBuiltin<"__builtin_ia32_rcpps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
+
+  def int_x86_avx_round_pd_256 : GCCBuiltin<"__builtin_ia32_roundpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx_round_ps_256 : GCCBuiltin<"__builtin_ia32_roundps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_i32_ty], [IntrNoMem]>;
+}
+
+// Horizontal ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_hadd_pd_256 : GCCBuiltin<"__builtin_ia32_haddpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_hsub_ps_256 : GCCBuiltin<"__builtin_ia32_hsubps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty], [IntrNoMem]>;
+  def int_x86_avx_hsub_pd_256 : GCCBuiltin<"__builtin_ia32_hsubpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_hadd_ps_256 : GCCBuiltin<"__builtin_ia32_haddps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty], [IntrNoMem]>;
+}
+
+// Vector permutation
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_vpermilvar_pd : GCCBuiltin<"__builtin_ia32_vpermilvarpd">,
+        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
+                  llvm_v2i64_ty], [IntrNoMem]>;
+  def int_x86_avx_vpermilvar_ps : GCCBuiltin<"__builtin_ia32_vpermilvarps">,
+        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
+                  llvm_v4i32_ty], [IntrNoMem]>;
+
+  def int_x86_avx_vpermilvar_pd_256 :
+        GCCBuiltin<"__builtin_ia32_vpermilvarpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4i64_ty], [IntrNoMem]>;
+  def int_x86_avx_vpermilvar_ps_256 :
+        GCCBuiltin<"__builtin_ia32_vpermilvarps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty], [IntrNoMem]>;
+
+  def int_x86_avx_vperm2f128_pd_256 :
+        GCCBuiltin<"__builtin_ia32_vperm2f128_pd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx_vperm2f128_ps_256 :
+        GCCBuiltin<"__builtin_ia32_vperm2f128_ps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx_vperm2f128_si_256 :
+        GCCBuiltin<"__builtin_ia32_vperm2f128_si256">,
+        Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
+                  llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
+
+  def int_x86_avx_vpermil_pd : GCCBuiltin<"__builtin_ia32_vpermilpd">,
+        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
+                  llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx_vpermil_ps : GCCBuiltin<"__builtin_ia32_vpermilps">,
+        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
+                  llvm_i8_ty], [IntrNoMem]>;
+
+  def int_x86_avx_vpermil_pd_256 : GCCBuiltin<"__builtin_ia32_vpermilpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx_vpermil_ps_256 : GCCBuiltin<"__builtin_ia32_vpermilps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_i8_ty], [IntrNoMem]>;
+}
+
+// Vector blend
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_blend_pd_256 : GCCBuiltin<"__builtin_ia32_blendpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx_blend_ps_256 : GCCBuiltin<"__builtin_ia32_blendps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx_blendv_pd_256 : GCCBuiltin<"__builtin_ia32_blendvpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty, llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_blendv_ps_256 : GCCBuiltin<"__builtin_ia32_blendvps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty, llvm_v8f32_ty], [IntrNoMem]>;
+}
+
+// Vector dot product
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_dp_ps_256 : GCCBuiltin<"__builtin_ia32_dpps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty, llvm_i32_ty], [IntrNoMem]>;
+}
+
+// Vector compare
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_cmp_pd_256 : GCCBuiltin<"__builtin_ia32_cmppd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx_cmp_ps_256 : GCCBuiltin<"__builtin_ia32_cmpps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
+}
+
+// Vector extract and insert
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_vextractf128_pd_256 :
+        GCCBuiltin<"__builtin_ia32_vextractf128_pd256">,
+        Intrinsic<[llvm_v2f64_ty], [llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx_vextractf128_ps_256 :
+        GCCBuiltin<"__builtin_ia32_vextractf128_ps256">,
+        Intrinsic<[llvm_v4f32_ty], [llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx_vextractf128_si_256 :
+        GCCBuiltin<"__builtin_ia32_vextractf128_si256">,
+        Intrinsic<[llvm_v4i32_ty], [llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
+
+  def int_x86_avx_vinsertf128_pd_256 :
+        GCCBuiltin<"__builtin_ia32_vinsertf128_pd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
+                  llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx_vinsertf128_ps_256 :
+        GCCBuiltin<"__builtin_ia32_vinsertf128_ps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
+                  llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx_vinsertf128_si_256 :
+        GCCBuiltin<"__builtin_ia32_vinsertf128_si256">,
+        Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
+                  llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
+}
+
+// Vector convert
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_cvtdq2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtdq2pd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
+  def int_x86_avx_cvtdq2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtdq2ps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
+  def int_x86_avx_cvt_pd2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtpd2ps256">,
+        Intrinsic<[llvm_v4f32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_cvt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvtps2dq256">,
+        Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
+  def int_x86_avx_cvt_ps2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtps2pd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
+  def int_x86_avx_cvtt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvttpd2dq256">,
+        Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_cvt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvtpd2dq256">,
+        Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_cvtt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvttps2dq256">,
+        Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
+}
+
+// Vector bit test
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_vtestz_pd : GCCBuiltin<"__builtin_ia32_vtestzpd">,
+        Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
+                  llvm_v2f64_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestc_pd : GCCBuiltin<"__builtin_ia32_vtestcpd">,
+        Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
+                  llvm_v2f64_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestnzc_pd : GCCBuiltin<"__builtin_ia32_vtestnzcpd">,
+        Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
+                  llvm_v2f64_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestz_ps : GCCBuiltin<"__builtin_ia32_vtestzps">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
+                  llvm_v4f32_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestc_ps : GCCBuiltin<"__builtin_ia32_vtestcps">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
+                  llvm_v4f32_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestnzc_ps : GCCBuiltin<"__builtin_ia32_vtestnzcps">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
+                  llvm_v4f32_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestz_pd_256 : GCCBuiltin<"__builtin_ia32_vtestzpd256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestcpd256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestnzc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestnzcpd256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
+                  llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestz_ps_256 : GCCBuiltin<"__builtin_ia32_vtestzps256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestcps256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty], [IntrNoMem]>;
+  def int_x86_avx_vtestnzc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestnzcps256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
+                  llvm_v8f32_ty], [IntrNoMem]>;
+  def int_x86_avx_ptestz_256 : GCCBuiltin<"__builtin_ia32_ptestz256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
+                  llvm_v4i64_ty], [IntrNoMem]>;
+  def int_x86_avx_ptestc_256 : GCCBuiltin<"__builtin_ia32_ptestc256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
+                  llvm_v4i64_ty], [IntrNoMem]>;
+  def int_x86_avx_ptestnzc_256 : GCCBuiltin<"__builtin_ia32_ptestnzc256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
+                  llvm_v4i64_ty], [IntrNoMem]>;
+}
+
+// Vector extract sign mask
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_movmsk_pd_256 : GCCBuiltin<"__builtin_ia32_movmskpd256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
+  def int_x86_avx_movmsk_ps_256 : GCCBuiltin<"__builtin_ia32_movmskps256">,
+        Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
+}
+
+// Vector zero
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_vzeroall : GCCBuiltin<"__builtin_ia32_vzeroall">,
+        Intrinsic<[], [], []>;
+  def int_x86_avx_vzeroupper : GCCBuiltin<"__builtin_ia32_vzeroupper">,
+        Intrinsic<[], [], []>;
+}
+
+// Vector load with broadcast
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_vbroadcastss :
+        GCCBuiltin<"__builtin_ia32_vbroadcastss">,
+        Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty], [IntrReadMem]>;
+  def int_x86_avx_vbroadcast_sd_256 :
+        GCCBuiltin<"__builtin_ia32_vbroadcastsd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadMem]>;
+  def int_x86_avx_vbroadcastss_256 :
+        GCCBuiltin<"__builtin_ia32_vbroadcastss256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty], [IntrReadMem]>;
+  def int_x86_avx_vbroadcastf128_pd_256 :
+        GCCBuiltin<"__builtin_ia32_vbroadcastf128_pd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadMem]>;
+  def int_x86_avx_vbroadcastf128_ps_256 :
+        GCCBuiltin<"__builtin_ia32_vbroadcastf128_ps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty], [IntrReadMem]>;
+}
+
+// SIMD load ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_loadu_pd_256 : GCCBuiltin<"__builtin_ia32_loadupd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadMem]>;
+  def int_x86_avx_loadu_ps_256 : GCCBuiltin<"__builtin_ia32_loadups256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty], [IntrReadMem]>;
+  def int_x86_avx_loadu_dq_256 : GCCBuiltin<"__builtin_ia32_loaddqu256">,
+        Intrinsic<[llvm_v32i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
+  def int_x86_avx_ldu_dq_256 : GCCBuiltin<"__builtin_ia32_lddqu256">,
+        Intrinsic<[llvm_v32i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
+}
+
+// SIMD store ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_storeu_pd_256 : GCCBuiltin<"__builtin_ia32_storeupd256">,
+        Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty], []>;
+  def int_x86_avx_storeu_ps_256 : GCCBuiltin<"__builtin_ia32_storeups256">,
+        Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty], []>;
+  def int_x86_avx_storeu_dq_256 : GCCBuiltin<"__builtin_ia32_storedqu256">,
+        Intrinsic<[], [llvm_ptr_ty, llvm_v32i8_ty], []>;
+}
+
+// Cacheability support ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_movnt_dq_256 : GCCBuiltin<"__builtin_ia32_movntdq256">,
+        Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty], []>;
+  def int_x86_avx_movnt_pd_256 : GCCBuiltin<"__builtin_ia32_movntpd256">,
+        Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty], []>;
+  def int_x86_avx_movnt_ps_256 : GCCBuiltin<"__builtin_ia32_movntps256">,
+        Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty], []>;
+}
+
+// Conditional load ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_maskload_pd : GCCBuiltin<"__builtin_ia32_maskloadpd">,
+        Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2f64_ty], [IntrReadMem]>;
+  def int_x86_avx_maskload_ps : GCCBuiltin<"__builtin_ia32_maskloadps">,
+        Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4f32_ty], [IntrReadMem]>;
+  def int_x86_avx_maskload_pd_256 : GCCBuiltin<"__builtin_ia32_maskloadpd256">,
+        Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4f64_ty], [IntrReadMem]>;
+  def int_x86_avx_maskload_ps_256 : GCCBuiltin<"__builtin_ia32_maskloadps256">,
+        Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8f32_ty], [IntrReadMem]>;
+}
+
+// Conditional store ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_avx_maskstore_pd : GCCBuiltin<"__builtin_ia32_maskstorepd">,
+        Intrinsic<[], [llvm_ptr_ty,
+                  llvm_v2f64_ty, llvm_v2f64_ty], []>;
+  def int_x86_avx_maskstore_ps : GCCBuiltin<"__builtin_ia32_maskstoreps">,
+        Intrinsic<[], [llvm_ptr_ty,
+                  llvm_v4f32_ty, llvm_v4f32_ty], []>;
+  def int_x86_avx_maskstore_pd_256 :
+        GCCBuiltin<"__builtin_ia32_maskstorepd256">,
+        Intrinsic<[], [llvm_ptr_ty,
+                  llvm_v4f64_ty, llvm_v4f64_ty], []>;
+  def int_x86_avx_maskstore_ps_256 :
+        GCCBuiltin<"__builtin_ia32_maskstoreps256">,
+        Intrinsic<[], [llvm_ptr_ty,
+                  llvm_v8f32_ty, llvm_v8f32_ty], []>;
+}
+
+//===----------------------------------------------------------------------===//
 // MMX
 
 // Empty MMX state op.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_mmx_emms  : GCCBuiltin<"__builtin_ia32_emms">,
-              Intrinsic<[], [], [IntrWriteMem]>;
+              Intrinsic<[], [], []>;
   def int_x86_mmx_femms : GCCBuiltin<"__builtin_ia32_femms">,
-              Intrinsic<[], [], [IntrWriteMem]>;
+              Intrinsic<[], [], []>;
 }
 
 // Integer arithmetic ops.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   // Addition
+  def int_x86_mmx_padd_b : GCCBuiltin<"__builtin_ia32_paddb">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_padd_w : GCCBuiltin<"__builtin_ia32_paddw">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_padd_d : GCCBuiltin<"__builtin_ia32_paddd">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_padd_q : GCCBuiltin<"__builtin_ia32_paddq">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+
   def int_x86_mmx_padds_b : GCCBuiltin<"__builtin_ia32_paddsb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   def int_x86_mmx_padds_w : GCCBuiltin<"__builtin_ia32_paddsw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
 
   def int_x86_mmx_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   def int_x86_mmx_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
 
   // Subtraction
+  def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+
   def int_x86_mmx_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
 
   def int_x86_mmx_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
 
   // Multiplication
   def int_x86_mmx_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
+  def int_x86_mmx_pmull_w : GCCBuiltin<"__builtin_ia32_pmullw">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   def int_x86_mmx_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   def int_x86_mmx_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
-                         llvm_v2i32_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   def int_x86_mmx_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
+
+  // Bitwise operations
+  def int_x86_mmx_pand : GCCBuiltin<"__builtin_ia32_pand">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_pandn : GCCBuiltin<"__builtin_ia32_pandn">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_por : GCCBuiltin<"__builtin_ia32_por">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_pxor : GCCBuiltin<"__builtin_ia32_pxor">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
 
   // Averages
   def int_x86_mmx_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   def int_x86_mmx_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
 
   // Maximum
   def int_x86_mmx_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   def int_x86_mmx_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
 
   // Minimum
   def int_x86_mmx_pminu_b : GCCBuiltin<"__builtin_ia32_pminub">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   def int_x86_mmx_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
 
   // Packed sum of absolute differences
   def int_x86_mmx_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem, Commutative]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
 }
 
 // Integer shift ops.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   // Shift left logical
   def int_x86_mmx_psll_w : GCCBuiltin<"__builtin_ia32_psllw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v1i64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_psll_d : GCCBuiltin<"__builtin_ia32_pslld">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
-                         llvm_v1i64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_psll_q : GCCBuiltin<"__builtin_ia32_psllq">,
-              Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty,
-                         llvm_v1i64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
 
   def int_x86_mmx_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v1i64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_psrl_d : GCCBuiltin<"__builtin_ia32_psrld">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
-                         llvm_v1i64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq">,
-              Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty,
-                         llvm_v1i64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
 
   def int_x86_mmx_psra_w : GCCBuiltin<"__builtin_ia32_psraw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v1i64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_psra_d : GCCBuiltin<"__builtin_ia32_psrad">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
-                         llvm_v1i64_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
 
   def int_x86_mmx_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_i32_ty], [IntrNoMem]>;
   def int_x86_mmx_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_i32_ty], [IntrNoMem]>;
   def int_x86_mmx_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi">,
-              Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_i32_ty], [IntrNoMem]>;
 
   def int_x86_mmx_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_i32_ty], [IntrNoMem]>;
   def int_x86_mmx_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_i32_ty], [IntrNoMem]>;
   def int_x86_mmx_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi">,
-              Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_i32_ty], [IntrNoMem]>;
 
   def int_x86_mmx_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_i32_ty], [IntrNoMem]>;
   def int_x86_mmx_psrai_d : GCCBuiltin<"__builtin_ia32_psradi">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
                          llvm_i32_ty], [IntrNoMem]>;
 }
 
 // Pack ops.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_mmx_packsswb : GCCBuiltin<"__builtin_ia32_packsswb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_packssdw : GCCBuiltin<"__builtin_ia32_packssdw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v2i32_ty,
-                         llvm_v2i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_packuswb : GCCBuiltin<"__builtin_ia32_packuswb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
+}
+
+// Unpacking ops.
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_mmx_punpckhbw : GCCBuiltin<"__builtin_ia32_punpckhbw">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
+  def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
+                        [IntrNoMem]>;
 }
 
 // Integer comparison ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_mmx_pcmpeq_b : GCCBuiltin<"__builtin_ia32_pcmpeqb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_pcmpeq_w : GCCBuiltin<"__builtin_ia32_pcmpeqw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_pcmpeq_d : GCCBuiltin<"__builtin_ia32_pcmpeqd">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
-                         llvm_v2i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
 
   def int_x86_mmx_pcmpgt_b : GCCBuiltin<"__builtin_ia32_pcmpgtb">,
-              Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
-                         llvm_v8i8_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_pcmpgt_w : GCCBuiltin<"__builtin_ia32_pcmpgtw">,
-              Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
-                         llvm_v4i16_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
   def int_x86_mmx_pcmpgt_d : GCCBuiltin<"__builtin_ia32_pcmpgtd">,
-              Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty,
-                         llvm_v2i32_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
+                         llvm_x86mmx_ty], [IntrNoMem]>;
 }
 
 // Misc.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_mmx_maskmovq : GCCBuiltin<"__builtin_ia32_maskmovq">,
-              Intrinsic<[],
-                        [llvm_v8i8_ty, llvm_v8i8_ty, llvm_ptr_ty],
-                        [IntrWriteMem]>;
+              Intrinsic<[], [llvm_x86mmx_ty, llvm_x86mmx_ty, llvm_ptr_ty], []>;
 
   def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">,
-              Intrinsic<[llvm_i32_ty], [llvm_v8i8_ty], [IntrNoMem]>;
+              Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
 
   def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">,
-              Intrinsic<[], [llvm_ptr_ty,
-                         llvm_v1i64_ty], [IntrWriteMem]>;
+              Intrinsic<[], [llvm_ptrx86mmx_ty, llvm_x86mmx_ty], []>;
+
+  def int_x86_mmx_palignr_b : GCCBuiltin<"__builtin_ia32_palignr">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 
+                        llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem]>;
+
+  def int_x86_mmx_pextr_w : GCCBuiltin<"__builtin_ia32_vec_ext_v4hi">,
+              Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty], 
+                        [IntrNoMem]>;
+
+  def int_x86_mmx_pinsr_w : GCCBuiltin<"__builtin_ia32_vec_set_v4hi">,
+              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 
+                        llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
 }

Modified: llvm/branches/wendling/eh/include/llvm/LLVMContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/LLVMContext.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/LLVMContext.h (original)
+++ llvm/branches/wendling/eh/include/llvm/LLVMContext.h Tue Oct 26 19:48:03 2010
@@ -20,6 +20,7 @@
 class LLVMContextImpl;
 class StringRef;
 class Instruction;
+class Module;
 template <typename T> class SmallVectorImpl;
 
 /// This is an important class for using LLVM in a threaded context.  It
@@ -28,10 +29,6 @@
 /// LLVMContext itself provides no locking guarantees, so you should be careful
 /// to have one context per thread.
 class LLVMContext {
-  // DO NOT IMPLEMENT
-  LLVMContext(LLVMContext&);
-  void operator=(LLVMContext&);
-
 public:
   LLVMContextImpl *const pImpl;
   LLVMContext();
@@ -40,7 +37,8 @@
   // Pinned metadata names, which always have the same value.  This is a
   // compile-time performance optimization, not a correctness optimization.
   enum {
-    MD_dbg = 0   // "dbg"
+    MD_dbg = 0,  // "dbg"
+    MD_tbaa = 1  // "tbaa"
   };
   
   /// getMDKindID - Return a unique non-zero ID for the specified metadata kind.
@@ -77,6 +75,21 @@
   void emitError(unsigned LocCookie, StringRef ErrorStr);
   void emitError(const Instruction *I, StringRef ErrorStr);
   void emitError(StringRef ErrorStr);
+
+private:
+  // DO NOT IMPLEMENT
+  LLVMContext(LLVMContext&);
+  void operator=(LLVMContext&);
+
+  /// addModule - Register a module as being instantiated in this context.  If
+  /// the context is deleted, the module will be deleted as well.
+  void addModule(Module*);
+  
+  /// removeModule - Unregister a module from this context.
+  void removeModule(Module*);
+  
+  // Module needs access to the add/removeModule methods.
+  friend class Module;
 };
 
 /// getGlobalContext - Returns a global context.  This is for LLVM clients that

Modified: llvm/branches/wendling/eh/include/llvm/LinkAllPasses.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/LinkAllPasses.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/LinkAllPasses.h (original)
+++ llvm/branches/wendling/eh/include/llvm/LinkAllPasses.h Tue Oct 26 19:48:03 2010
@@ -20,8 +20,8 @@
 #include "llvm/Analysis/FindUsedTypes.h"
 #include "llvm/Analysis/IntervalPartition.h"
 #include "llvm/Analysis/Passes.h"
-#include "llvm/Analysis/PointerTracking.h"
 #include "llvm/Analysis/PostDominators.h"
+#include "llvm/Analysis/RegionPass.h"
 #include "llvm/Analysis/RegionPrinter.h"
 #include "llvm/Analysis/ScalarEvolution.h"
 #include "llvm/Analysis/Lint.h"
@@ -53,6 +53,7 @@
       (void) llvm::createBasicAliasAnalysisPass();
       (void) llvm::createLibCallAliasAnalysisPass(0);
       (void) llvm::createScalarEvolutionAliasAnalysisPass();
+      (void) llvm::createTypeBasedAliasAnalysisPass();
       (void) llvm::createBlockPlacementPass();
       (void) llvm::createBreakCriticalEdgesPass();
       (void) llvm::createCFGSimplificationPass();
@@ -90,7 +91,6 @@
       (void) llvm::createLoopUnrollPass();
       (void) llvm::createLoopUnswitchPass();
       (void) llvm::createLoopRotatePass();
-      (void) llvm::createLoopIndexSplitPass();
       (void) llvm::createLowerInvokePass();
       (void) llvm::createLowerSetJmpPass();
       (void) llvm::createLowerSwitchPass();
@@ -141,20 +141,21 @@
       (void) llvm::createDbgInfoPrinterPass();
       (void) llvm::createModuleDebugInfoPrinterPass();
       (void) llvm::createPartialInliningPass();
-      (void) llvm::createSSIPass();
-      (void) llvm::createSSIEverythingPass();
       (void) llvm::createGEPSplitterPass();
-      (void) llvm::createABCDPass();
       (void) llvm::createLintPass();
       (void) llvm::createSinkingPass();
+      (void) llvm::createLowerAtomicPass();
+      (void) llvm::createCorrelatedValuePropagationPass();
+      (void) llvm::createMemDepPrinter();
 
       (void)new llvm::IntervalPartition();
       (void)new llvm::FindUsedTypes();
       (void)new llvm::ScalarEvolution();
-      (void)new llvm::PointerTracking();
       ((llvm::Function*)0)->viewCFGOnly();
+      llvm::RGPassManager RGM(0);
+      ((llvm::RegionPass*)0)->runOnRegion((llvm::Region*)0, RGM);
       llvm::AliasSetTracker X(*(llvm::AliasAnalysis*)0);
-      X.add((llvm::Value*)0, 0);  // for -print-alias-sets
+      X.add((llvm::Value*)0, 0, 0);  // for -print-alias-sets
     }
   } ForcePassLinking; // Force link by creating a global definition.
 }

Modified: llvm/branches/wendling/eh/include/llvm/LinkAllVMCore.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/LinkAllVMCore.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/LinkAllVMCore.h (original)
+++ llvm/branches/wendling/eh/include/llvm/LinkAllVMCore.h Tue Oct 26 19:48:03 2010
@@ -33,7 +33,6 @@
 #include "llvm/System/TimeValue.h"
 #include "llvm/Support/Dwarf.h"
 #include "llvm/Support/MathExtras.h"
-#include "llvm/Support/SlowOperationInformer.h"
 #include <cstdlib>
 
 namespace {

Modified: llvm/branches/wendling/eh/include/llvm/Linker.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Linker.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Linker.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Linker.h Tue Oct 26 19:48:03 2010
@@ -158,7 +158,6 @@
     /// @returns true if an error occurred, false otherwise
     /// @see LinkItemKind
     /// @see getLastError
-    /// @throws nothing
     bool LinkInItems (
       const ItemList& Items, ///< Set of libraries/files to link in
       ItemList& NativeItems  ///< Output list of native files/libs

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCAsmInfo.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCAsmInfo.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCAsmInfo.h Tue Oct 26 19:48:03 2010
@@ -22,7 +22,7 @@
 namespace llvm {
   class MCSection;
   class MCContext;
-  
+
   /// MCAsmInfo - This class is intended to be used as a base class for asm
   /// properties and features specific to the target.
   namespace ExceptionHandling { enum ExceptionsType { None, Dwarf, SjLj }; }
@@ -36,25 +36,25 @@
     /// HasSubsectionsViaSymbols - True if this target has the MachO
     /// .subsections_via_symbols directive.
     bool HasSubsectionsViaSymbols;           // Default is false.
-    
+
     /// HasMachoZeroFillDirective - True if this is a MachO target that supports
     /// the macho-specific .zerofill directive for emitting BSS Symbols.
     bool HasMachoZeroFillDirective;               // Default is false.
-    
+
     /// HasMachoTBSSDirective - True if this is a MachO target that supports
     /// the macho-specific .tbss directive for emitting thread local BSS Symbols
     bool HasMachoTBSSDirective;                 // Default is false.
-    
+
     /// HasStaticCtorDtorReferenceInStaticMode - True if the compiler should
     /// emit a ".reference .constructors_used" or ".reference .destructors_used"
     /// directive after the a static ctor/dtor list.  This directive is only
     /// emitted in Static relocation model.
     bool HasStaticCtorDtorReferenceInStaticMode;  // Default is false.
-    
+
     /// MaxInstLength - This is the maximum possible length of an instruction,
     /// which is needed to compute the size of an inline asm.
     unsigned MaxInstLength;                  // Defaults to 4.
-    
+
     /// PCSymbol - The symbol used to represent the current PC.  Used in PC
     /// relative expressions.
     const char *PCSymbol;                    // Defaults to "$".
@@ -72,6 +72,9 @@
     /// assembler.
     const char *CommentString;               // Defaults to "#"
 
+    /// LabelSuffix - This is appended to emitted labels.
+    const char *LabelSuffix;                 // Defaults to ":"
+
     /// GlobalPrefix - If this is set to a non-empty string, it is prepended
     /// onto all global symbols.  This is often used for "_" or ".".
     const char *GlobalPrefix;                // Defaults to ""
@@ -80,12 +83,12 @@
     /// pool entries that are completely private to the .s file and should not
     /// have names in the .o file.  This is often "." or "L".
     const char *PrivateGlobalPrefix;         // Defaults to "."
-    
+
     /// LinkerPrivateGlobalPrefix - This prefix is used for symbols that should
     /// be passed through the assembler but be removed by the linker.  This
     /// is "l" on Darwin, currently used for some ObjC metadata.
     const char *LinkerPrivateGlobalPrefix;   // Defaults to ""
-    
+
     /// InlineAsmStart/End - If these are nonempty, they contain a directive to
     /// emit before and after an inline assembly statement.
     const char *InlineAsmStart;              // Defaults to "#APP\n"
@@ -117,7 +120,7 @@
     /// AsciiDirective - This directive allows emission of an ascii string with
     /// the standard C escape characters embedded into it.
     const char *AsciiDirective;              // Defaults to "\t.ascii\t"
-    
+
     /// AscizDirective - If not null, this allows for special handling of
     /// zero terminated strings on this target.  This is commonly supported as
     /// ".asciz".  If a target doesn't support this, it can be set to null.
@@ -135,7 +138,7 @@
     /// which should be relocated as a 32-bit GP-relative offset, e.g. .gpword
     /// on Mips or .gprel32 on Alpha.
     const char *GPRel32Directive;            // Defaults to NULL.
-    
+
     /// getDataASDirective - Return the directive that should be used to emit
     /// data of the specified size to the specified numeric address space.
     virtual const char *getDataASDirective(unsigned Size, unsigned AS) const {
@@ -149,15 +152,15 @@
     bool SunStyleELFSectionSwitchSyntax;     // Defaults to false.
 
     /// UsesELFSectionDirectiveForBSS - This is true if this target uses ELF
-    /// '.section' directive before the '.bss' one. It's used for PPC/Linux 
+    /// '.section' directive before the '.bss' one. It's used for PPC/Linux
     /// which doesn't support the '.bss' directive only.
     bool UsesELFSectionDirectiveForBSS;      // Defaults to false.
-    
+
     /// HasMicrosoftFastStdCallMangling - True if this target uses microsoft
     /// style mangling for functions with X86_StdCall/X86_FastCall calling
     /// convention.
     bool HasMicrosoftFastStdCallMangling;    // Defaults to false.
-    
+
     //===--- Alignment Information ----------------------------------------===//
 
     /// AlignDirective - The directive used to emit round up to an alignment
@@ -176,27 +179,27 @@
     unsigned TextAlignFillValue;             // Defaults to 0
 
     //===--- Global Variable Emission Directives --------------------------===//
-    
+
     /// GlobalDirective - This is the directive used to declare a global entity.
     ///
     const char *GlobalDirective;             // Defaults to NULL.
 
-    /// ExternDirective - This is the directive used to declare external 
+    /// ExternDirective - This is the directive used to declare external
     /// globals.
     ///
     const char *ExternDirective;             // Defaults to NULL.
-    
+
     /// HasSetDirective - True if the assembler supports the .set directive.
     bool HasSetDirective;                    // Defaults to true.
-    
+
     /// HasLCOMMDirective - This is true if the target supports the .lcomm
     /// directive.
     bool HasLCOMMDirective;                  // Defaults to false.
-    
+
     /// COMMDirectiveAlignmentIsInBytes - True is COMMDirective's optional
     /// alignment is to be specified in bytes instead of log2(n).
     bool COMMDirectiveAlignmentIsInBytes;    // Defaults to true;
-    
+
     /// HasDotTypeDotSizeDirective - True if the target has .type and .size
     /// directives, this is true for most ELF targets.
     bool HasDotTypeDotSizeDirective;         // Defaults to true.
@@ -212,7 +215,7 @@
     /// WeakRefDirective - This directive, if non-null, is used to declare a
     /// global as being a weak undefined symbol.
     const char *WeakRefDirective;            // Defaults to NULL.
-    
+
     /// WeakDefDirective - This directive, if non-null, is used to declare a
     /// global as being a weak defined symbol.
     const char *WeakDefDirective;            // Defaults to NULL.
@@ -220,7 +223,7 @@
     /// LinkOnceDirective - This directive, if non-null is used to declare a
     /// global as being a weak defined symbol.  This is used on cygwin/mingw.
     const char *LinkOnceDirective;           // Defaults to NULL.
-    
+
     /// HiddenVisibilityAttr - This attribute, if not MCSA_Invalid, is used to
     /// declare a symbol as having hidden visibility.
     MCSymbolAttr HiddenVisibilityAttr;       // Defaults to MCSA_Hidden.
@@ -254,7 +257,15 @@
 
     /// DwarfSectionOffsetDirective - Special section offset directive.
     const char* DwarfSectionOffsetDirective; // Defaults to NULL
-    
+
+    /// DwarfUsesAbsoluteLabelForStmtList - True if DW_AT_stmt_list needs
+    /// absolute label instead of offset.
+    bool DwarfUsesAbsoluteLabelForStmtList;  // Defaults to true;
+
+    // DwarfUsesLabelOffsetDifference - True if Dwarf2 output can
+    // use EmitLabelOffsetDifference.
+    bool DwarfUsesLabelOffsetForRanges;
+
     //===--- CBE Asm Translation Table -----------------------------------===//
 
     const char *const *AsmTransCBE;          // Defaults to empty
@@ -268,7 +279,7 @@
     static unsigned getULEB128Size(unsigned Value);
 
     bool hasSubsectionsViaSymbols() const { return HasSubsectionsViaSymbols; }
-    
+
     // Data directive accessors.
     //
     const char *getData8bitsDirective(unsigned AS = 0) const {
@@ -291,11 +302,11 @@
     virtual const MCSection *getNonexecutableStackSection(MCContext &Ctx) const{
       return 0;
     }
-    
+
     bool usesSunStyleELFSectionSwitchSyntax() const {
       return SunStyleELFSectionSwitchSyntax;
     }
-    
+
     bool usesELFSectionDirectiveForBSS() const {
       return UsesELFSectionDirectiveForBSS;
     }
@@ -303,7 +314,7 @@
     bool hasMicrosoftFastStdCallMangling() const {
       return HasMicrosoftFastStdCallMangling;
     }
-    
+
     // Accessors.
     //
     bool hasMachoZeroFillDirective() const { return HasMachoZeroFillDirective; }
@@ -326,6 +337,9 @@
     const char *getCommentString() const {
       return CommentString;
     }
+    const char *getLabelSuffix() const {
+      return LabelSuffix;
+    }
     const char *getGlobalPrefix() const {
       return GlobalPrefix;
     }
@@ -388,7 +402,7 @@
     const char *getWeakRefDirective() const { return WeakRefDirective; }
     const char *getWeakDefDirective() const { return WeakDefDirective; }
     const char *getLinkOnceDirective() const { return LinkOnceDirective; }
-    
+
     MCSymbolAttr getHiddenVisibilityAttr() const { return HiddenVisibilityAttr;}
     MCSymbolAttr getProtectedVisibilityAttr() const {
       return ProtectedVisibilityAttr;
@@ -417,6 +431,12 @@
     const char *getDwarfSectionOffsetDirective() const {
       return DwarfSectionOffsetDirective;
     }
+    bool doesDwarfUsesAbsoluteLabelForStmtList() const {
+      return DwarfUsesAbsoluteLabelForStmtList;
+    }
+    bool doesDwarfUsesLabelOffsetForRanges() const {
+      return DwarfUsesLabelOffsetForRanges;
+    }
     const char *const *getAsmCBE() const {
       return AsmTransCBE;
     }

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCAssembler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCAssembler.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCAssembler.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCAssembler.h Tue Oct 26 19:48:03 2010
@@ -24,6 +24,7 @@
 class raw_ostream;
 class MCAsmLayout;
 class MCAssembler;
+class MCBinaryExpr;
 class MCContext;
 class MCCodeEmitter;
 class MCExpr;
@@ -48,7 +49,8 @@
     FT_Data,
     FT_Fill,
     FT_Inst,
-    FT_Org
+    FT_Org,
+    FT_Dwarf
   };
 
 private:
@@ -163,7 +165,7 @@
   /// Inst - The instruction this is a fragment for.
   MCInst Inst;
 
-  /// InstSize - The size of the currently encoded instruction.
+  /// Code - Binary data for the currently encoded instruction.
   SmallString<8> Code;
 
   /// Fixups - The list of fixups in this fragment.
@@ -336,6 +338,36 @@
   static bool classof(const MCOrgFragment *) { return true; }
 };
 
+class MCDwarfLineAddrFragment : public MCFragment {
+  /// LineDelta - the value of the difference between the two line numbers
+  /// between two .loc dwarf directives.
+  int64_t LineDelta;
+
+  /// AddrDelta - The expression for the difference of the two symbols that
+  /// make up the address delta between two .loc dwarf directives.
+  const MCExpr *AddrDelta;
+
+public:
+  MCDwarfLineAddrFragment(int64_t _LineDelta, const MCExpr &_AddrDelta,
+                      MCSectionData *SD = 0)
+    : MCFragment(FT_Dwarf, SD),
+      LineDelta(_LineDelta), AddrDelta(&_AddrDelta) {}
+
+  /// @name Accessors
+  /// @{
+
+  int64_t getLineDelta() const { return LineDelta; }
+
+  const MCExpr &getAddrDelta() const { return *AddrDelta; }
+
+  /// @}
+
+  static bool classof(const MCFragment *F) {
+    return F->getKind() == MCFragment::FT_Dwarf;
+  }
+  static bool classof(const MCDwarfLineAddrFragment *) { return true; }
+};
+
 // FIXME: Should this be a separate class, or just merged into MCSection? Since
 // we anticipate the fast path being through an MCAssembler, the only reason to
 // keep it out is for API abstraction.
@@ -453,6 +485,10 @@
   // common symbol can never get a definition.
   uint64_t CommonSize;
 
+  /// SymbolSize - An expression describing how to calculate the size of
+  /// a symbol. If a symbol has no size this field will be NULL.
+  const MCExpr *SymbolSize;
+
   /// CommonAlign - The alignment of the symbol, if it is 'common'.
   //
   // FIXME: Pack this in with other fields?
@@ -510,6 +546,15 @@
     return CommonSize;
   }
 
+  void setSize(const MCExpr *SS) {
+    SymbolSize = SS;
+  }
+
+  const MCExpr *getSize() const {
+    return SymbolSize;
+  }
+
+
   /// getCommonAlignment - Return the alignment of a 'common' symbol.
   unsigned getCommonAlignment() const {
     assert(isCommon() && "Not a 'common' symbol!");
@@ -591,6 +636,7 @@
 
   unsigned RelaxAll : 1;
   unsigned SubsectionsViaSymbols : 1;
+  unsigned PadSectionToAlignment : 1;
 
 private:
   /// Evaluate a fixup to a relocatable expression and the value which should be
@@ -606,17 +652,19 @@
   /// \return Whether the fixup value was fully resolved. This is true if the
   /// \arg Value result is fixed, otherwise the value may change due to
   /// relocation.
-  bool EvaluateFixup(const MCAsmLayout &Layout,
+  bool EvaluateFixup(const MCObjectWriter &Writer, const MCAsmLayout &Layout,
                      const MCFixup &Fixup, const MCFragment *DF,
                      MCValue &Target, uint64_t &Value) const;
 
   /// Check whether a fixup can be satisfied, or whether it needs to be relaxed
   /// (increased in size, in order to hold its value correctly).
-  bool FixupNeedsRelaxation(const MCFixup &Fixup, const MCFragment *DF,
+  bool FixupNeedsRelaxation(const MCObjectWriter &Writer,
+                            const MCFixup &Fixup, const MCFragment *DF,
                             const MCAsmLayout &Layout) const;
 
   /// Check whether the given fragment needs relaxation.
-  bool FragmentNeedsRelaxation(const MCInstFragment *IF,
+  bool FragmentNeedsRelaxation(const MCObjectWriter &Writer,
+                               const MCInstFragment *IF,
                                const MCAsmLayout &Layout) const;
 
   /// Compute the effective fragment size assuming it is layed out at the given
@@ -627,7 +675,7 @@
 
   /// LayoutOnce - Perform one layout iteration and return true if any offsets
   /// were adjusted.
-  bool LayoutOnce(MCAsmLayout &Layout);
+  bool LayoutOnce(const MCObjectWriter &Writer, MCAsmLayout &Layout);
 
   /// FinishLayout - Finalize a layout, including fragment lowering.
   void FinishLayout(MCAsmLayout &Layout);
@@ -635,8 +683,7 @@
 public:
   /// Find the symbol which defines the atom containing the given symbol, or
   /// null if there is no such symbol.
-  const MCSymbolData *getAtom(const MCAsmLayout &Layout,
-                              const MCSymbolData *Symbol) const;
+  const MCSymbolData *getAtom(const MCSymbolData *Symbol) const;
 
   /// Check whether a particular symbol is visible to the linker and is required
   /// in the symbol table, or whether it can be discarded by the assembler. This
@@ -650,6 +697,9 @@
   void WriteSectionData(const MCSectionData *Section, const MCAsmLayout &Layout,
                         MCObjectWriter *OW) const;
 
+  void AddSectionToTheEnd(const MCObjectWriter &Writer, MCSectionData &SD,
+                          MCAsmLayout &Layout);
+
 public:
   /// Construct a new assembler instance.
   ///
@@ -660,7 +710,8 @@
   // option is to make this abstract, and have targets provide concrete
   // implementations as we do with AsmParser.
   MCAssembler(MCContext &_Context, TargetAsmBackend &_Backend,
-              MCCodeEmitter &_Emitter, raw_ostream &OS);
+              MCCodeEmitter &_Emitter, bool _PadSectionToAlignment,
+              raw_ostream &OS);
   ~MCAssembler();
 
   MCContext &getContext() const { return Context; }

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCCodeEmitter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCCodeEmitter.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCCodeEmitter.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCCodeEmitter.h Tue Oct 26 19:48:03 2010
@@ -23,7 +23,7 @@
 /// MCFixupKindInfo - Target independent information on a fixup kind.
 struct MCFixupKindInfo {
   enum FixupKindFlags {
-    /// Is this fixup kind PCrelative. This is used by the assembler backend to
+    /// Is this fixup kind PCrelative? This is used by the assembler backend to
     /// evaluate fixup values in a target independent manner when possible.
     FKF_IsPCRel = (1 << 0)
   };
@@ -35,7 +35,7 @@
   /// The bit offset to write the relocation into.
   //
   // FIXME: These two fields are under-specified and not general enough, but it
-  // is covers many things, and is enough to let the AsmStreamer pretty-print
+  // covers many things. It's enough to let the AsmStreamer pretty-print
   // the encoding.
   unsigned TargetOffset;
 

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCContext.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCContext.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCContext.h Tue Oct 26 19:48:03 2010
@@ -11,6 +11,7 @@
 #define LLVM_MC_MCCONTEXT_H
 
 #include "llvm/MC/SectionKind.h"
+#include "llvm/MC/MCDwarf.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/Support/Allocator.h"
@@ -24,6 +25,8 @@
   class MCSymbol;
   class MCLabel;
   class MCDwarfFile;
+  class MCDwarfLoc;
+  class MCLineSection;
   class StringRef;
   class Twine;
   class MCSectionMachO;
@@ -37,9 +40,6 @@
 
     /// The MCAsmInfo for this target.
     const MCAsmInfo &MAI;
-    
-    /// Sections - Bindings of names to allocated sections.
-    StringMap<MCSection*> Sections;
 
     /// Symbols - Bindings of names to symbols.
     StringMap<MCSymbol*> Symbols;
@@ -72,6 +72,14 @@
     std::vector<MCDwarfFile *> MCDwarfFiles;
     std::vector<StringRef> MCDwarfDirs;
 
+    /// The current dwarf line information from the last dwarf .loc directive.
+    MCDwarfLoc CurrentDwarfLoc;
+    bool DwarfLocSeen;
+
+    /// The dwarf line information from the .loc directives for the sections
+    /// with assembled machine instructions have after seeing .loc directives.
+    DenseMap<const MCSection *, MCLineSection *> MCLineSections;
+
     /// Allocator - Allocator object used for creating machine code objects.
     ///
     /// We use a bump pointer allocator to avoid the need to track all allocated
@@ -132,7 +140,8 @@
     
     const MCSection *getELFSection(StringRef Section, unsigned Type,
                                    unsigned Flags, SectionKind Kind,
-                                   bool IsExplicit = false);
+                                   bool IsExplicit = false,
+                                   unsigned EntrySize = 0);
 
     const MCSection *getCOFFSection(StringRef Section, unsigned Characteristics,
                                     int Selection, SectionKind Kind);
@@ -151,9 +160,39 @@
     /// GetDwarfFile - creates an entry in the dwarf file and directory tables.
     unsigned GetDwarfFile(StringRef FileName, unsigned FileNumber);
 
+    bool isValidDwarfFileNumber(unsigned FileNumber);
+
+    bool hasDwarfFiles(void) {
+      return MCDwarfFiles.size() != 0;
+    }
+
     const std::vector<MCDwarfFile *> &getMCDwarfFiles() {
       return MCDwarfFiles;
     }
+    const std::vector<StringRef> &getMCDwarfDirs() {
+      return MCDwarfDirs;
+    }
+    DenseMap<const MCSection *, MCLineSection *> &getMCLineSections() {
+      return MCLineSections;
+    }
+
+    /// setCurrentDwarfLoc - saves the information from the currently parsed
+    /// dwarf .loc directive and sets DwarfLocSeen.  When the next instruction
+    /// is assembled an entry in the line number table with this information and
+    /// the address of the instruction will be created.
+    void setCurrentDwarfLoc(unsigned FileNum, unsigned Line, unsigned Column,
+                            unsigned Flags, unsigned Isa) {
+      CurrentDwarfLoc.setFileNum(FileNum);
+      CurrentDwarfLoc.setLine(Line);
+      CurrentDwarfLoc.setColumn(Column);
+      CurrentDwarfLoc.setFlags(Flags);
+      CurrentDwarfLoc.setIsa(Isa);
+      DwarfLocSeen = true;
+    }
+    void ClearDwarfLocSeen() { DwarfLocSeen = false; }
+
+    bool getDwarfLocSeen() { return DwarfLocSeen; }
+    const MCDwarfLoc &getCurrentDwarfLoc() { return CurrentDwarfLoc; }
 
     /// @}
 

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCDirectives.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCDirectives.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCDirectives.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCDirectives.h Tue Oct 26 19:48:03 2010
@@ -43,6 +43,7 @@
 };
 
 enum MCAssemblerFlag {
+  MCAF_SyntaxUnified,         ///< .syntax (ARM/ELF)
   MCAF_SubsectionsViaSymbols  ///< .subsections_via_symbols (MachO)
 };
   

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCDwarf.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCDwarf.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCDwarf.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCDwarf.h Tue Oct 26 19:48:03 2010
@@ -8,8 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 // This file contains the declaration of the MCDwarfFile to support the dwarf
-// .file directive.
-// TODO: add the support needed for the .loc directive.
+// .file directive and the .loc directive.
 //
 //===----------------------------------------------------------------------===//
 
@@ -17,9 +16,18 @@
 #define LLVM_MC_MCDWARF_H
 
 #include "llvm/ADT/StringRef.h"
+#include "llvm/MC/MCStreamer.h"
+#include "llvm/MC/MCObjectStreamer.h"
+#include "llvm/MC/MCObjectWriter.h"
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/Dwarf.h"
+#include <vector>
 
 namespace llvm {
   class MCContext;
+  class MCSection;
+  class MCSymbol;
+  class MCObjectStreamer;
   class raw_ostream;
 
   /// MCDwarfFile - Instances of this class represent the name of the dwarf
@@ -46,6 +54,10 @@
     /// getName - Get the base name of this MCDwarfFile.
     StringRef getName() const { return Name; }
 
+    /// getDirIndex - Get the dirIndex of this MCDwarfFile.
+    unsigned getDirIndex() const { return DirIndex; }
+
+
     /// print - Print the value to the stream \arg OS.
     void print(raw_ostream &OS) const;
 
@@ -57,6 +69,150 @@
     DwarfFile.print(OS);
     return OS;
   }
+
+  /// MCDwarfLoc - Instances of this class represent the information from a
+  /// dwarf .loc directive.
+  class MCDwarfLoc {
+    // FileNum - the file number.
+    unsigned FileNum;
+    // Line - the line number.
+    unsigned Line;
+    // Column - the column position.
+    unsigned Column;
+    // Flags (see #define's below)
+    unsigned Flags;
+    // Isa
+    unsigned Isa;
+
+// Flag that indicates the initial value of the is_stmt_start flag.
+#define DWARF2_LINE_DEFAULT_IS_STMT     1
+
+#define DWARF2_FLAG_IS_STMT        (1 << 0)
+#define DWARF2_FLAG_BASIC_BLOCK    (1 << 1)
+#define DWARF2_FLAG_PROLOGUE_END   (1 << 2)
+#define DWARF2_FLAG_EPILOGUE_BEGIN (1 << 3)
+
+  private:  // MCContext manages these
+    friend class MCContext;
+    friend class MCLineEntry;
+    MCDwarfLoc(unsigned fileNum, unsigned line, unsigned column, unsigned flags,
+               unsigned isa)
+      : FileNum(fileNum), Line(line), Column(column), Flags(flags), Isa(isa) {}
+
+    // Allow the default copy constructor and assignment operator to be used
+    // for an MCDwarfLoc object.
+
+  public:
+    /// getFileNum - Get the FileNum of this MCDwarfLoc.
+    unsigned getFileNum() { return FileNum; }
+
+    /// getLine - Get the Line of this MCDwarfLoc.
+    unsigned getLine() { return Line; }
+
+    /// getColumn - Get the Column of this MCDwarfLoc.
+    unsigned getColumn() { return Column; }
+
+    /// getFlags - Get the Flags of this MCDwarfLoc.
+    unsigned getFlags() { return Flags; }
+
+    /// getIsa - Get the Isa of this MCDwarfLoc.
+    unsigned getIsa() { return Isa; }
+
+    /// setFileNum - Set the FileNum of this MCDwarfLoc.
+    void setFileNum(unsigned fileNum) { FileNum = fileNum; }
+
+    /// setLine - Set the Line of this MCDwarfLoc.
+    void setLine(unsigned line) { Line = line; }
+
+    /// setColumn - Set the Column of this MCDwarfLoc.
+    void setColumn(unsigned column) { Column = column; }
+
+    /// setFlags - Set the Flags of this MCDwarfLoc.
+    void setFlags(unsigned flags) { Flags = flags; }
+
+    /// setIsa - Set the Isa of this MCDwarfLoc.
+    void setIsa(unsigned isa) { Isa = isa; }
+  };
+
+  /// MCLineEntry - Instances of this class represent the line information for
+  /// the dwarf line table entries.  Which is created after a machine
+  /// instruction is assembled and uses an address from a temporary label
+  /// created at the current address in the current section and the info from
+  /// the last .loc directive seen as stored in the context.
+  class MCLineEntry : public MCDwarfLoc {
+    MCSymbol *Label;
+
+  private:
+    // Allow the default copy constructor and assignment operator to be used
+    // for an MCLineEntry object.
+
+  public:
+    // Constructor to create an MCLineEntry given a symbol and the dwarf loc.
+    MCLineEntry(MCSymbol *label, const MCDwarfLoc loc) : MCDwarfLoc(loc),
+                Label(label) {}
+
+    MCSymbol *getLabel() { return Label; }
+
+    // This is called when an instruction is assembled into the specified
+    // section and if there is information from the last .loc directive that
+    // has yet to have a line entry made for it is made.
+    static void Make(MCObjectStreamer *MCOS, const MCSection *Section);
+  };
+
+  /// MCLineSection - Instances of this class represent the line information
+  /// for a section where machine instructions have been assembled after seeing
+  /// .loc directives.  This is the information used to build the dwarf line
+  /// table for a section.
+  class MCLineSection {
+
+  private:
+    MCLineSection(const MCLineSection&);  // DO NOT IMPLEMENT
+    void operator=(const MCLineSection&); // DO NOT IMPLEMENT
+
+  public:
+    // Constructor to create an MCLineSection with an empty MCLineEntries
+    // vector.
+    MCLineSection() {}
+
+    // addLineEntry - adds an entry to this MCLineSection's line entries
+    void addLineEntry(const MCLineEntry &LineEntry) {
+      MCLineEntries.push_back(LineEntry);
+    }
+
+    typedef std::vector<MCLineEntry> MCLineEntryCollection;
+    typedef MCLineEntryCollection::iterator iterator;
+
+  private:
+    MCLineEntryCollection MCLineEntries;
+
+  public:
+    MCLineEntryCollection *getMCLineEntries() { return &MCLineEntries; }
+  };
+
+  class MCDwarfFileTable {
+  public:
+    //
+    // This emits the Dwarf file and the line tables.
+    //
+    static void Emit(MCObjectStreamer *MCOS, const MCSection *DwarfLineSection);
+  };
+
+  class MCDwarfLineAddr {
+  public:
+    /// Utility function to encode a Dwarf pair of LineDelta and AddrDeltas.
+    static void Encode(int64_t LineDelta, uint64_t AddrDelta, raw_ostream &OS);
+
+    /// Utility function to emit the encoding to a streamer.
+    static void Emit(MCObjectStreamer *MCOS,
+                     int64_t LineDelta,uint64_t AddrDelta);
+
+    /// Utility function to compute the size of the encoding.
+    static uint64_t ComputeSize(int64_t LineDelta, uint64_t AddrDelta);
+
+    /// Utility function to write the encoding to an object writer.
+    static void Write(MCObjectWriter *OW,
+                      int64_t LineDelta, uint64_t AddrDelta);
+  };
 } // end namespace llvm
 
 #endif

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCExpr.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCExpr.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCExpr.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCExpr.h Tue Oct 26 19:48:03 2010
@@ -43,6 +43,8 @@
 protected:
   explicit MCExpr(ExprKind _Kind) : Kind(_Kind) {}
 
+  bool EvaluateAsRelocatableImpl(MCValue &Res, const MCAsmLayout *Layout,
+                                 bool InSet) const;
 public:
   /// @name Accessors
   /// @{
@@ -137,6 +139,7 @@
     VK_TPOFF,
     VK_ARM_HI16, // The R_ARM_MOVT_ABS relocation (:upper16: in the asm file)
     VK_ARM_LO16, // The R_ARM_MOVW_ABS_NC relocation (:lower16: in the asm file)
+    VK_ARM_PLT,  // ARM-style PLT symbol references. i.e., (PLT) instead of @PLT
     VK_TLVP // Mach-O thread local variable relocation
   };
 

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCInst.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCInst.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCInst.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCInst.h Tue Oct 26 19:48:03 2010
@@ -33,24 +33,27 @@
     kInvalid,                 ///< Uninitialized.
     kRegister,                ///< Register operand.
     kImmediate,               ///< Immediate operand.
+    kFPImmediate,             ///< Floating-point immediate operand.
     kExpr                     ///< Relocatable immediate operand.
   };
   unsigned char Kind;
-  
+
   union {
     unsigned RegVal;
     int64_t ImmVal;
+    double FPImmVal;
     const MCExpr *ExprVal;
   };
 public:
-  
-  MCOperand() : Kind(kInvalid) {}
+
+  MCOperand() : Kind(kInvalid), FPImmVal(0.0) {}
 
   bool isValid() const { return Kind != kInvalid; }
   bool isReg() const { return Kind == kRegister; }
   bool isImm() const { return Kind == kImmediate; }
+  bool isFPImm() const { return Kind == kFPImmediate; }
   bool isExpr() const { return Kind == kExpr; }
-  
+
   /// getReg - Returns the register number.
   unsigned getReg() const {
     assert(isReg() && "This is not a register operand!");
@@ -62,7 +65,7 @@
     assert(isReg() && "This is not a register operand!");
     RegVal = Reg;
   }
-  
+
   int64_t getImm() const {
     assert(isImm() && "This is not an immediate");
     return ImmVal;
@@ -71,7 +74,17 @@
     assert(isImm() && "This is not an immediate");
     ImmVal = Val;
   }
-  
+
+  double getFPImm() const {
+    assert(isFPImm() && "This is not an FP immediate");
+    return FPImmVal;
+  }
+
+  void setFPImm(double Val) {
+    assert(isFPImm() && "This is not an FP immediate");
+    FPImmVal = Val;
+  }
+
   const MCExpr *getExpr() const {
     assert(isExpr() && "This is not an expression");
     return ExprVal;
@@ -80,7 +93,7 @@
     assert(isExpr() && "This is not an expression");
     ExprVal = Val;
   }
-  
+
   static MCOperand CreateReg(unsigned Reg) {
     MCOperand Op;
     Op.Kind = kRegister;
@@ -93,6 +106,12 @@
     Op.ImmVal = Val;
     return Op;
   }
+  static MCOperand CreateFPImm(double Val) {
+    MCOperand Op;
+    Op.Kind = kFPImmediate;
+    Op.FPImmVal = Val;
+    return Op;
+  }
   static MCOperand CreateExpr(const MCExpr *Val) {
     MCOperand Op;
     Op.Kind = kExpr;
@@ -104,23 +123,23 @@
   void dump() const;
 };
 
-  
+
 /// MCInst - Instances of this class represent a single low-level machine
-/// instruction. 
+/// instruction.
 class MCInst {
   unsigned Opcode;
   SmallVector<MCOperand, 8> Operands;
 public:
   MCInst() : Opcode(0) {}
-  
+
   void setOpcode(unsigned Op) { Opcode = Op; }
-  
+
   unsigned getOpcode() const { return Opcode; }
 
   const MCOperand &getOperand(unsigned i) const { return Operands[i]; }
   MCOperand &getOperand(unsigned i) { return Operands[i]; }
   unsigned getNumOperands() const { return Operands.size(); }
-  
+
   void addOperand(const MCOperand &Op) {
     Operands.push_back(Op);
   }
@@ -136,6 +155,15 @@
                    StringRef Separator = " ") const;
 };
 
+inline raw_ostream& operator<<(raw_ostream &OS, const MCOperand &MO) {
+  MO.print(OS, 0);
+  return OS;
+}
+
+inline raw_ostream& operator<<(raw_ostream &OS, const MCInst &MI) {
+  MI.print(OS, 0);
+  return OS;
+}
 
 } // end namespace llvm
 

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCInstPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCInstPrinter.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCInstPrinter.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCInstPrinter.h Tue Oct 26 19:48:03 2010
@@ -28,21 +28,21 @@
 public:
   MCInstPrinter(const MCAsmInfo &mai)
     : CommentStream(0), MAI(mai) {}
-  
+
   virtual ~MCInstPrinter();
 
   /// setCommentStream - Specify a stream to emit comments to.
   void setCommentStream(raw_ostream &OS) { CommentStream = &OS; }
-  
+
   /// printInst - Print the specified MCInst to the specified raw_ostream.
   ///
   virtual void printInst(const MCInst *MI, raw_ostream &OS) = 0;
-  
+
   /// getOpcodeName - Return the name of the specified opcode enum (e.g.
   /// "MOV32ri") or empty if we can't resolve it.
   virtual StringRef getOpcodeName(unsigned Opcode) const;
 };
-  
+
 } // namespace llvm
 
 #endif

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCObjectStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCObjectStreamer.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCObjectStreamer.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCObjectStreamer.h Tue Oct 26 19:48:03 2010
@@ -35,7 +35,8 @@
 
 protected:
   MCObjectStreamer(MCContext &Context, TargetAsmBackend &TAB,
-                   raw_ostream &_OS, MCCodeEmitter *_Emitter);
+                   raw_ostream &_OS, MCCodeEmitter *_Emitter,
+                   bool _PadSectionToAlignment);
   ~MCObjectStreamer();
 
   MCSectionData *getCurrentSectionData() const {

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCObjectWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCObjectWriter.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCObjectWriter.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCObjectWriter.h Tue Oct 26 19:48:03 2010
@@ -75,12 +75,22 @@
                                 const MCFixup &Fixup, MCValue Target,
                                 uint64_t &FixedValue) = 0;
 
+  /// Check if a fixup is fully resolved.
+  ///
+  /// This routine is used by the assembler to let the file format decide
+  /// if a fixup is not fully resolved. For example, one that crosses
+  /// two sections on ELF.
+  virtual bool IsFixupFullyResolved(const MCAssembler &Asm,
+                                    const MCValue Target,
+                                    bool IsPCRel,
+                                    const MCFragment *DF) const = 0;
+
   /// Write the object file.
   ///
   /// This routine is called by the assembler after layout and relaxation is
   /// complete, fixups have been evaluated and applied, and relocations
   /// generated.
-  virtual void WriteObject(const MCAssembler &Asm,
+  virtual void WriteObject(MCAssembler &Asm,
                            const MCAsmLayout &Layout) = 0;
 
   /// @}
@@ -160,9 +170,14 @@
   }
 
   /// @}
+
+  /// Utility function to encode a SLEB128 value.
+  static void EncodeSLEB128(int64_t Value, raw_ostream &OS);
+  /// Utility function to encode a ULEB128 value.
+  static void EncodeULEB128(uint64_t Value, raw_ostream &OS);
 };
 
-MCObjectWriter *createWinCOFFObjectWriter(raw_ostream &OS);
+MCObjectWriter *createWinCOFFObjectWriter(raw_ostream &OS, bool is64Bit);
 
 } // End llvm namespace
 

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCParser/AsmLexer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCParser/AsmLexer.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCParser/AsmLexer.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCParser/AsmLexer.h Tue Oct 26 19:48:03 2010
@@ -61,6 +61,7 @@
   AsmToken LexLineComment();
   AsmToken LexDigit();
   AsmToken LexQuote();
+  AsmToken LexFloatLiteral();
 };
   
 } // end namespace llvm

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmLexer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmLexer.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmLexer.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmLexer.h Tue Oct 26 19:48:03 2010
@@ -33,6 +33,9 @@
     // Integer values.
     Integer,
     
+    // Real values.
+    Real,
+    
     // Register values (stored in IntVal).  Only used by TargetAsmLexer.
     Register,
     

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmParser.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmParser.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCAsmParser.h Tue Oct 26 19:48:03 2010
@@ -39,6 +39,8 @@
 
   TargetAsmParser *TargetParser;
 
+  unsigned ShowParsedOperands : 1;
+
 protected: // Can only create subclasses.
   MCAsmParser();
 
@@ -61,6 +63,9 @@
   TargetAsmParser &getTargetParser() const { return *TargetParser; }
   void setTargetParser(TargetAsmParser &P);
 
+  bool getShowParsedOperands() const { return ShowParsedOperands; }
+  void setShowParsedOperands(bool Value) { ShowParsedOperands = Value; }
+
   /// Run - Run the parser on the input source buffer.
   virtual bool Run(bool NoInitialTextSection, bool NoFinalize = false) = 0;
 
@@ -94,6 +99,10 @@
   /// will be either the EndOfStatement or EOF.
   virtual StringRef ParseStringToEndOfStatement() = 0;
 
+  /// EatToEndOfStatement - Skip to the end of the current statement, for error
+  /// recovery.
+  virtual void EatToEndOfStatement() = 0;
+  
   /// ParseExpression - Parse an arbitrary expression.
   ///
   /// @param Res - The value of the expression. The result is undefined

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCParsedAsmOperand.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCParsedAsmOperand.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCParsedAsmOperand.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCParser/MCParsedAsmOperand.h Tue Oct 26 19:48:03 2010
@@ -12,6 +12,7 @@
 
 namespace llvm {
 class SMLoc;
+class raw_ostream;
 
 /// MCParsedAsmOperand - This abstract class represents a source-level assembly
 /// instruction operand.  It should be subclassed by target-specific code.  This
@@ -23,9 +24,12 @@
   virtual ~MCParsedAsmOperand() {}
   
   /// getStartLoc - Get the location of the first token of this operand.
-  virtual SMLoc getStartLoc() const;
+  virtual SMLoc getStartLoc() const = 0;
   /// getEndLoc - Get the location of the last token of this operand.
-  virtual SMLoc getEndLoc() const;
+  virtual SMLoc getEndLoc() const = 0;
+
+  /// dump - Print a debug representation of the operand to the given stream.
+  virtual void dump(raw_ostream &OS) const = 0;
 };
 
 } // end namespace llvm.

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCSection.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCSection.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCSection.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCSection.h Tue Oct 26 19:48:03 2010
@@ -32,8 +32,7 @@
     enum SectionVariant {
       SV_COFF = 0,
       SV_ELF,
-      SV_MachO,
-      SV_PIC16
+      SV_MachO
     };
 
   private:
@@ -61,6 +60,10 @@
       return false;
     }
 
+    // UseCodeAlign - Return true if a .align directive should use
+    // "optimized nops" to fill instead of 0s.
+    virtual bool UseCodeAlign() const = 0;
+
     static bool classof(const MCSection *) { return true; }
   };
 

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCSectionCOFF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCSectionCOFF.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCSectionCOFF.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCSectionCOFF.h Tue Oct 26 19:48:03 2010
@@ -19,12 +19,12 @@
 #include "llvm/Support/COFF.h"
 
 namespace llvm {
-  
+
 /// MCSectionCOFF - This represents a section on Windows
   class MCSectionCOFF : public MCSection {
     // The memory for this string is stored in the same MCContext as *this.
     StringRef SectionName;
-    
+
     /// Characteristics - This is the Characteristics field of a section,
     //  drawn from the enums below.
     unsigned Characteristics;
@@ -52,9 +52,10 @@
     StringRef getSectionName() const { return SectionName; }
     unsigned getCharacteristics() const { return Characteristics; }
     int getSelection () const { return Selection; }
-    
+
     virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
                                       raw_ostream &OS) const;
+    virtual bool UseCodeAlign() const;
 
     static bool classof(const MCSection *S) {
       return S->getVariant() == SV_COFF;

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCSectionELF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCSectionELF.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCSectionELF.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCSectionELF.h Tue Oct 26 19:48:03 2010
@@ -17,17 +17,17 @@
 #include "llvm/MC/MCSection.h"
 
 namespace llvm {
-  
+
 /// MCSectionELF - This represents a section on linux, lots of unix variants
 /// and some bare metal systems.
 class MCSectionELF : public MCSection {
   /// SectionName - This is the name of the section.  The referenced memory is
   /// owned by TargetLoweringObjectFileELF's ELFUniqueMap.
   StringRef SectionName;
-  
+
   /// Type - This is the sh_type field of a section, drawn from the enums below.
   unsigned Type;
-  
+
   /// Flags - This is the sh_flags field of a section, drawn from the enums.
   /// below.
   unsigned Flags;
@@ -35,13 +35,18 @@
   /// IsExplicit - Indicates that this section comes from globals with an
   /// explicit section specified.
   bool IsExplicit;
-  
+
+  /// EntrySize - The size of each entry in this section. This size only
+  /// makes sense for sections that contain fixed-sized entries. If a
+  /// section does not contain fixed-sized entries 'EntrySize' will be 0.
+  unsigned EntrySize;
+
 private:
   friend class MCContext;
   MCSectionELF(StringRef Section, unsigned type, unsigned flags,
-               SectionKind K, bool isExplicit)
+               SectionKind K, bool isExplicit, unsigned entrySize)
     : MCSection(SV_ELF, K), SectionName(Section), Type(type), Flags(flags),
-      IsExplicit(isExplicit) {}
+      IsExplicit(isExplicit), EntrySize(entrySize) {}
   ~MCSectionELF();
 public:
 
@@ -53,10 +58,10 @@
   bool ShouldPrintSectionType(unsigned Ty) const;
 
   /// HasCommonSymbols - True if this section holds common symbols, this is
-  /// indicated on the ELF object file by a symbol with SHN_COMMON section 
+  /// indicated on the ELF object file by a symbol with SHN_COMMON section
   /// header index.
   bool HasCommonSymbols() const;
-  
+
   /// These are the section type and flags fields.  An ELF section can have
   /// only one Type, but can have more than one of the flags specified.
   ///
@@ -79,7 +84,7 @@
 
     // The section holds a symbol hash table.
     SHT_HASH             = 0x05U,
-    
+
     // Information for dynamic linking.
     SHT_DYNAMIC          = 0x06U,
 
@@ -92,7 +97,7 @@
     // The section holds relocation entries without explicit addends.
     SHT_REL              = 0x09U,
 
-    // This section type is reserved but has unspecified semantics. 
+    // This section type is reserved but has unspecified semantics.
     SHT_SHLIB            = 0x0AU,
 
     // This section holds a symbol table.
@@ -116,8 +121,19 @@
     // referenced symbol table contain the escape value SHN_XINDEX
     SHT_SYMTAB_SHNDX     = 0x12U,
 
-    LAST_KNOWN_SECTION_TYPE = SHT_SYMTAB_SHNDX
-  }; 
+    // Start of target-specific flags.
+
+    // Exception Index table
+    SHT_ARM_EXIDX           = 0x70000001U,
+    // BPABI DLL dynamic linking pre-emption map
+    SHT_ARM_PREEMPTMAP      = 0x70000002U,
+    //  Object file compatibility attributes
+    SHT_ARM_ATTRIBUTES      = 0x70000003U,
+    SHT_ARM_DEBUGOVERLAY    = 0x70000004U,
+    SHT_ARM_OVERLAYSECTION  = 0x70000005U,
+
+    LAST_KNOWN_SECTION_TYPE = SHT_ARM_OVERLAYSECTION
+  };
 
   /// Valid section flags.
   enum {
@@ -152,14 +168,14 @@
     // This section holds Thread-Local Storage.
     SHF_TLS              = 0x400U,
 
-    
+
     // Start of target-specific flags.
 
     /// XCORE_SHF_CP_SECTION - All sections with the "c" flag are grouped
     /// together by the linker to form the constant pool and the cp register is
     /// set to the start of the constant pool by the boot code.
     XCORE_SHF_CP_SECTION = 0x800U,
-    
+
     /// XCORE_SHF_DP_SECTION - All sections with the "d" flag are grouped
     /// together by the linker to form the data section and the dp register is
     /// set to the start of the section by the boot code.
@@ -169,10 +185,12 @@
   StringRef getSectionName() const { return SectionName; }
   unsigned getType() const { return Type; }
   unsigned getFlags() const { return Flags; }
-  
+  unsigned getEntrySize() const { return EntrySize; }
+
   void PrintSwitchToSection(const MCAsmInfo &MAI,
                             raw_ostream &OS) const;
-  
+  virtual bool UseCodeAlign() const;
+
   /// isBaseAddressKnownZero - We know that non-allocatable sections (like
   /// debug info) have a base of zero.
   virtual bool isBaseAddressKnownZero() const {
@@ -183,6 +201,10 @@
     return S->getVariant() == SV_ELF;
   }
   static bool classof(const MCSectionELF *) { return true; }
+
+  // Return the entry size for sections with fixed-width data.
+  static unsigned DetermineEntrySize(SectionKind Kind);
+
 };
 
 } // end namespace llvm

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCSectionMachO.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCSectionMachO.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCSectionMachO.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCSectionMachO.h Tue Oct 26 19:48:03 2010
@@ -17,36 +17,36 @@
 #include "llvm/MC/MCSection.h"
 
 namespace llvm {
-  
+
 /// MCSectionMachO - This represents a section on a Mach-O system (used by
 /// Mac OS X).  On a Mac system, these are also described in
 /// /usr/include/mach-o/loader.h.
 class MCSectionMachO : public MCSection {
   char SegmentName[16];  // Not necessarily null terminated!
   char SectionName[16];  // Not necessarily null terminated!
-  
+
   /// TypeAndAttributes - This is the SECTION_TYPE and SECTION_ATTRIBUTES
   /// field of a section, drawn from the enums below.
   unsigned TypeAndAttributes;
-  
+
   /// Reserved2 - The 'reserved2' field of a section, used to represent the
   /// size of stubs, for example.
   unsigned Reserved2;
-  
+
   MCSectionMachO(StringRef Segment, StringRef Section,
-                 unsigned TAA, unsigned reserved2, SectionKind K);  
+                 unsigned TAA, unsigned reserved2, SectionKind K);
   friend class MCContext;
 public:
-  
+
   /// These are the section type and attributes fields.  A MachO section can
   /// have only one Type, but can have any of the attributes specified.
   enum {
     // TypeAndAttributes bitmasks.
     SECTION_TYPE       = 0x000000FFU,
     SECTION_ATTRIBUTES = 0xFFFFFF00U,
-    
+
     // Valid section types.
-    
+
     /// S_REGULAR - Regular section.
     S_REGULAR                    = 0x00U,
     /// S_ZEROFILL - Zero fill on demand section.
@@ -101,10 +101,10 @@
     S_THREAD_LOCAL_INIT_FUNCTION_POINTERS = 0x15U,
 
     LAST_KNOWN_SECTION_TYPE = S_THREAD_LOCAL_INIT_FUNCTION_POINTERS,
-    
+
 
     // Valid section attributes.
-    
+
     /// S_ATTR_PURE_INSTRUCTIONS - Section contains only true machine
     /// instructions.
     S_ATTR_PURE_INSTRUCTIONS   = 1U << 31,
@@ -165,6 +165,7 @@
 
   virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
                                     raw_ostream &OS) const;
+  virtual bool UseCodeAlign() const;
 
   static bool classof(const MCSection *S) {
     return S->getVariant() == SV_MachO;

Modified: llvm/branches/wendling/eh/include/llvm/MC/MCStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MCStreamer.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MCStreamer.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MCStreamer.h Tue Oct 26 19:48:03 2010
@@ -54,6 +54,10 @@
     /// kept up to date by SwitchSection.
     const MCSection *CurSection;
 
+    /// PrevSection - This is the previous section code is being emitted to, it
+    /// is kept up to date by SwitchSection.
+    const MCSection *PrevSection;
+
   public:
     virtual ~MCStreamer();
 
@@ -61,11 +65,11 @@
 
     /// @name Assembly File Formatting.
     /// @{
-    
+
     /// isVerboseAsm - Return true if this streamer supports verbose assembly
     /// and if it is enabled.
     virtual bool isVerboseAsm() const { return false; }
-    
+
     /// hasRawTextSupport - Return true if this asm streamer supports emitting
     /// unformatted text to the .s file with EmitRawText.
     virtual bool hasRawTextSupport() const { return false; }
@@ -78,30 +82,37 @@
     /// If the comment includes embedded \n's, they will each get the comment
     /// prefix as appropriate.  The added comment should not end with a \n.
     virtual void AddComment(const Twine &T) {}
-    
+
     /// GetCommentOS - Return a raw_ostream that comments can be written to.
     /// Unlike AddComment, you are required to terminate comments with \n if you
     /// use this method.
     virtual raw_ostream &GetCommentOS();
-    
+
     /// AddBlankLine - Emit a blank line to a .s file to pretty it up.
     virtual void AddBlankLine() {}
-    
+
     /// @}
-    
+
     /// @name Symbol & Section Management
     /// @{
-    
+
     /// getCurrentSection - Return the current section that the streamer is
     /// emitting code to.
     const MCSection *getCurrentSection() const { return CurSection; }
 
+    /// getPreviousSection - Return the previous section that the streamer is
+    /// emitting code to.
+    const MCSection *getPreviousSection() const { return PrevSection; }
+
     /// SwitchSection - Set the current section where code is being emitted to
     /// @p Section.  This is required to update CurSection.
     ///
     /// This corresponds to assembler directives like .section, .text, etc.
     virtual void SwitchSection(const MCSection *Section) = 0;
-    
+
+    /// InitSections - Create the default sections and set the initial one.
+    virtual void InitSections() = 0;
+
     /// EmitLabel - Emit a label for @p Symbol into the current section.
     ///
     /// This corresponds to an assembler statement such as:
@@ -162,7 +173,7 @@
     ///  .size symbol, expression
     ///
     virtual void EmitELFSize(MCSymbol *Symbol, const MCExpr *Value) = 0;
-    
+
     /// EmitCommonSymbol - Emit a common symbol.
     ///
     /// @param Symbol - The common symbol to emit.
@@ -177,7 +188,7 @@
     /// @param Symbol - The common symbol to emit.
     /// @param Size - The size of the common symbol.
     virtual void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size) = 0;
-    
+
     /// EmitZerofill - Emit the zerofill section and an optional symbol.
     ///
     /// @param Section - The zerofill section to create and or to put the symbol
@@ -196,7 +207,7 @@
     /// @param ByteAlignment - The alignment of the thread local common symbol
     /// if non-zero.  This must be a power of 2 on some targets.
     virtual void EmitTBSSSymbol(const MCSection *Section, MCSymbol *Symbol,
-                                uint64_t Size, unsigned ByteAlignment = 0) = 0;                                
+                                uint64_t Size, unsigned ByteAlignment = 0) = 0;
     /// @}
     /// @name Generating Data
     /// @{
@@ -217,36 +228,45 @@
     /// @param Size - The size of the integer (in bytes) to emit. This must
     /// match a native machine width.
     virtual void EmitValue(const MCExpr *Value, unsigned Size,
-                           unsigned AddrSpace) = 0;
+                           unsigned AddrSpace = 0) = 0;
 
     /// EmitIntValue - Special case of EmitValue that avoids the client having
     /// to pass in a MCExpr for constant integers.
-    virtual void EmitIntValue(uint64_t Value, unsigned Size,unsigned AddrSpace);
+    virtual void EmitIntValue(uint64_t Value, unsigned Size,
+                              unsigned AddrSpace = 0);
+
+    /// EmitULEB128Value - Special case of EmitValue that takes an ULEB128 and
+    /// emits the needed bytes for the encoded value.
+    virtual void EmitULEB128Value(uint64_t Value, unsigned AddrSpace = 0);
+
+    /// EmitSLEB128Value - Special case of EmitValue that takes an SLEB128 and
+    /// emits the needed bytes for the encoded value.
+    virtual void EmitSLEB128Value(int64_t Value, unsigned AddrSpace = 0);
 
     /// EmitSymbolValue - Special case of EmitValue that avoids the client
     /// having to pass in a MCExpr for MCSymbols.
     virtual void EmitSymbolValue(const MCSymbol *Sym, unsigned Size,
-                                 unsigned AddrSpace);
-    
+                                 unsigned AddrSpace = 0);
+
     /// EmitGPRel32Value - Emit the expression @p Value into the output as a
     /// gprel32 (32-bit GP relative) value.
     ///
     /// This is used to implement assembler directives such as .gprel32 on
     /// targets that support them.
     virtual void EmitGPRel32Value(const MCExpr *Value) = 0;
-    
+
     /// EmitFill - Emit NumBytes bytes worth of the value specified by
     /// FillValue.  This implements directives such as '.space'.
     virtual void EmitFill(uint64_t NumBytes, uint8_t FillValue,
                           unsigned AddrSpace);
-    
+
     /// EmitZeros - Emit NumBytes worth of zeros.  This is a convenience
     /// function that just wraps EmitFill.
     void EmitZeros(uint64_t NumBytes, unsigned AddrSpace) {
       EmitFill(NumBytes, 0, AddrSpace);
     }
 
-    
+
     /// EmitValueToAlignment - Emit some number of copies of @p Value until
     /// the byte alignment @p ByteAlignment is reached.
     ///
@@ -292,13 +312,13 @@
     /// @param Value - The value to use when filling bytes.
     virtual void EmitValueToOffset(const MCExpr *Offset,
                                    unsigned char Value = 0) = 0;
-    
+
     /// @}
-    
+
     /// EmitFileDirective - Switch to a new logical file.  This is used to
     /// implement the '.file "foo.c"' assembler directive.
     virtual void EmitFileDirective(StringRef Filename) = 0;
-    
+
     /// EmitDwarfFileDirective - Associate a filename with a specified logical
     /// file number.  This implements the DWARF2 '.file 4 "foo.c"' assembler
     /// directive.
@@ -313,7 +333,7 @@
     /// indicated by the hasRawTextSupport() predicate.  By default this aborts.
     virtual void EmitRawText(StringRef String);
     void EmitRawText(const Twine &String);
-    
+
     /// Finish - Finish emission of machine code.
     virtual void Finish() = 0;
   };
@@ -358,6 +378,12 @@
                                     MCCodeEmitter &CE, raw_ostream &OS,
                                     bool RelaxAll = false);
 
+  /// createELFStreamer - Create a machine code streamer which will generate
+  /// ELF format object files.
+  MCStreamer *createELFStreamer(MCContext &Ctx, TargetAsmBackend &TAB,
+				raw_ostream &OS, MCCodeEmitter *CE,
+				bool RelaxAll = false);
+
   /// createLoggingStreamer - Create a machine code streamer which just logs the
   /// API calls and then dispatches to another streamer.
   ///

Modified: llvm/branches/wendling/eh/include/llvm/MC/MachObjectWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/MC/MachObjectWriter.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/MC/MachObjectWriter.h (original)
+++ llvm/branches/wendling/eh/include/llvm/MC/MachObjectWriter.h Tue Oct 26 19:48:03 2010
@@ -36,7 +36,12 @@
                                 const MCFixup &Fixup, MCValue Target,
                                 uint64_t &FixedValue);
 
-  virtual void WriteObject(const MCAssembler &Asm, const MCAsmLayout &Layout);
+  virtual bool IsFixupFullyResolved(const MCAssembler &Asm,
+                                    const MCValue Target,
+                                    bool IsPCRel,
+                                    const MCFragment *DF) const;
+
+  virtual void WriteObject(MCAssembler &Asm, const MCAsmLayout &Layout);
 };
 
 } // End llvm namespace

Modified: llvm/branches/wendling/eh/include/llvm/Metadata.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Metadata.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Metadata.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Metadata.h Tue Oct 26 19:48:03 2010
@@ -38,7 +38,6 @@
   MDString(const MDString &);            // DO NOT IMPLEMENT
 
   StringRef Str;
-protected:
   explicit MDString(LLVMContext &C, StringRef S);
 
 public:
@@ -111,9 +110,8 @@
   void replaceOperand(MDNodeOperand *Op, Value *NewVal);
   ~MDNode();
 
-protected:
-  explicit MDNode(LLVMContext &C, Value *const *Vals, unsigned NumVals,
-                  bool isFunctionLocal);
+  MDNode(LLVMContext &C, Value *const *Vals, unsigned NumVals,
+         bool isFunctionLocal);
   
   static MDNode *getMDNode(LLVMContext &C, Value *const *Vals, unsigned NumVals,
                            FunctionLocalness FL, bool Insert = true);
@@ -128,6 +126,16 @@
                                        
   static MDNode *getIfExists(LLVMContext &Context, Value *const *Vals,
                              unsigned NumVals);
+
+  /// getTemporary - Return a temporary MDNode, for use in constructing
+  /// cyclic MDNode structures. A temporary MDNode is not uniqued,
+  /// may be RAUW'd, and must be manually deleted with deleteTemporary.
+  static MDNode *getTemporary(LLVMContext &Context, Value *const *Vals,
+                              unsigned NumVals);
+
+  /// deleteTemporary - Deallocate a node created by getTemporary. The
+  /// node must not have any users.
+  static void deleteTemporary(MDNode *N);
   
   /// getOperand - Return specified operand.
   Value *getOperand(unsigned i) const;
@@ -136,9 +144,6 @@
   unsigned getNumOperands() const { return NumOperands; }
   
   /// isFunctionLocal - Return whether MDNode is local to a function.
-  /// Note: MDNodes are designated as function-local when created, and keep
-  ///       that designation even if their operands are modified to no longer
-  ///       refer to function-local IR.
   bool isFunctionLocal() const {
     return (getSubclassDataFromValue() & FunctionLocalBit) != 0;
   }
@@ -175,8 +180,9 @@
 };
 
 //===----------------------------------------------------------------------===//
-/// NamedMDNode - a tuple of MDNodes.
-/// NamedMDNode is always named. All NamedMDNode operand has a type of metadata.
+/// NamedMDNode - a tuple of MDNodes. Despite its name, a NamedMDNode isn't
+/// itself an MDNode. NamedMDNodes belong to modules, have names, and contain
+/// lists of MDNodes.
 class NamedMDNode : public ilist_node<NamedMDNode> {
   friend class SymbolTableListTraits<NamedMDNode, Module>;
   friend struct ilist_traits<NamedMDNode>;
@@ -190,7 +196,6 @@
 
   void setParent(Module *M) { Parent = M; }
 
-protected:
   explicit NamedMDNode(const Twine &N);
 
 public:

Modified: llvm/branches/wendling/eh/include/llvm/Operator.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Operator.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Operator.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Operator.h Tue Oct 26 19:48:03 2010
@@ -99,7 +99,7 @@
   /// hasNoSignedWrap - Test whether this operation is known to never
   /// undergo signed overflow, aka the nsw property.
   bool hasNoSignedWrap() const {
-    return SubclassOptionalData & NoSignedWrap;
+    return (SubclassOptionalData & NoSignedWrap) != 0;
   }
 
   static inline bool classof(const OverflowingBinaryOperator *) { return true; }

Modified: llvm/branches/wendling/eh/include/llvm/Pass.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Pass.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Pass.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Pass.h Tue Oct 26 19:48:03 2010
@@ -29,11 +29,7 @@
 #ifndef LLVM_PASS_H
 #define LLVM_PASS_H
 
-#include "llvm/System/DataTypes.h"
-
 #include <string>
-#include <utility>
-#include <vector>
 
 namespace llvm {
 
@@ -50,7 +46,7 @@
 class StringRef;
 
 // AnalysisID - Use the PassInfo to identify a pass...
-typedef const PassInfo* AnalysisID;
+typedef const void* AnalysisID;
 
 /// Different types of internal pass managers. External pass managers
 /// (PassManager and FunctionPassManager) are not represented here.
@@ -61,6 +57,7 @@
   PMT_CallGraphPassManager,  ///< CGPassManager
   PMT_FunctionPassManager,   ///< FPPassManager
   PMT_LoopPassManager,       ///< LPPassManager
+  PMT_RegionPassManager,     ///< RGPassManager
   PMT_BasicBlockPassManager, ///< BBPassManager
   PMT_Last
 };
@@ -68,13 +65,14 @@
 // Different types of passes.
 enum PassKind {
   PT_BasicBlock,
+  PT_Region,
   PT_Loop,
   PT_Function,
   PT_CallGraphSCC,
   PT_Module,
   PT_PassManager
 };
-  
+
 //===----------------------------------------------------------------------===//
 /// Pass interface - Implemented by all 'passes'.  Subclass this if you are an
 /// interprocedural optimization or you do not fit into any of the more
@@ -82,14 +80,13 @@
 ///
 class Pass {
   AnalysisResolver *Resolver;  // Used to resolve analysis
-  intptr_t PassID;
+  const void *PassID;
   PassKind Kind;
   void operator=(const Pass&);  // DO NOT IMPLEMENT
   Pass(const Pass &);           // DO NOT IMPLEMENT
   
 public:
-  explicit Pass(PassKind K, intptr_t pid);
-  explicit Pass(PassKind K, const void *pid);
+  explicit Pass(PassKind K, char &pid);
   virtual ~Pass();
 
   
@@ -101,10 +98,10 @@
   ///
   virtual const char *getPassName() const;
 
-  /// getPassInfo - Return the PassInfo data structure that corresponds to this
-  /// pass...  If the pass has not been registered, this will return null.
-  ///
-  const PassInfo *getPassInfo() const;
+  /// getPassID - Return the PassID number that corresponds to this pass.
+  virtual AnalysisID getPassID() const {
+    return PassID;
+  }
 
   /// print - Print out the internal state of the pass.  This is called by
   /// Analyze to print out the contents of an analysis.  Otherwise it is not
@@ -124,7 +121,7 @@
   /// Each pass is responsible for assigning a pass manager to itself.
   /// PMS is the stack of available pass manager. 
   virtual void assignPassManager(PMStack &, 
-                                 PassManagerType = PMT_Unknown) {}
+                                 PassManagerType) {}
   /// Check if available pass managers are suitable for this pass or not.
   virtual void preparePassManager(PMStack &);
   
@@ -159,7 +156,7 @@
   /// an analysis interface through multiple inheritance.  If needed, it should
   /// override this to adjust the this pointer as needed for the specified pass
   /// info.
-  virtual void *getAdjustedAnalysisPointer(const PassInfo *);
+  virtual void *getAdjustedAnalysisPointer(AnalysisID ID);
   virtual ImmutablePass *getAsImmutablePass();
   virtual PMDataManager *getAsPMDataManager();
   
@@ -170,14 +167,9 @@
   // dumpPassStructure - Implement the -debug-passes=PassStructure option
   virtual void dumpPassStructure(unsigned Offset = 0);
 
-  template<typename AnalysisClass>
-  static const PassInfo *getClassPassInfo() {
-    return lookupPassInfo(intptr_t(&AnalysisClass::ID));
-  }
-
   // lookupPassInfo - Return the pass info object for the specified pass class,
   // or null if it is not known.
-  static const PassInfo *lookupPassInfo(intptr_t TI);
+  static const PassInfo *lookupPassInfo(const void *TI);
 
   // lookupPassInfo - Return the pass info object for the pass with the given
   // argument string, or null if it is not known.
@@ -200,7 +192,7 @@
   /// don't have the class name available (use getAnalysisIfAvailable if you
   /// do), but it can tell you if you need to preserve the pass at least.
   ///
-  bool mustPreserveAnalysisID(const PassInfo *AnalysisID) const;
+  bool mustPreserveAnalysisID(char &AID) const;
 
   /// getAnalysis<AnalysisType>() - This function is used by subclasses to get
   /// to the analysis information that they claim to use by overriding the
@@ -213,10 +205,10 @@
   AnalysisType &getAnalysis(Function &F); // Defined in PassAnalysisSupport.h
 
   template<typename AnalysisType>
-  AnalysisType &getAnalysisID(const PassInfo *PI) const;
+  AnalysisType &getAnalysisID(AnalysisID PI) const;
 
   template<typename AnalysisType>
-  AnalysisType &getAnalysisID(const PassInfo *PI, Function &F);
+  AnalysisType &getAnalysisID(AnalysisID PI, Function &F);
 };
 
 
@@ -235,13 +227,12 @@
   virtual bool runOnModule(Module &M) = 0;
 
   virtual void assignPassManager(PMStack &PMS, 
-                                 PassManagerType T = PMT_ModulePassManager);
+                                 PassManagerType T);
 
   ///  Return what kind of Pass Manager can manage this pass.
   virtual PassManagerType getPotentialPassManagerType() const;
 
-  explicit ModulePass(intptr_t pid) : Pass(PT_Module, pid) {}
-  explicit ModulePass(const void *pid) : Pass(PT_Module, pid) {}
+  explicit ModulePass(char &pid) : Pass(PT_Module, pid) {}
   // Force out-of-line virtual method.
   virtual ~ModulePass();
 };
@@ -268,8 +259,7 @@
   ///
   bool runOnModule(Module &) { return false; }
 
-  explicit ImmutablePass(intptr_t pid) : ModulePass(pid) {}
-  explicit ImmutablePass(const void *pid) 
+  explicit ImmutablePass(char &pid) 
   : ModulePass(pid) {}
   
   // Force out-of-line virtual method.
@@ -287,8 +277,7 @@
 ///
 class FunctionPass : public Pass {
 public:
-  explicit FunctionPass(intptr_t pid) : Pass(PT_Function, pid) {}
-  explicit FunctionPass(const void *pid) : Pass(PT_Function, pid) {}
+  explicit FunctionPass(char &pid) : Pass(PT_Function, pid) {}
 
   /// createPrinterPass - Get a function printer pass.
   Pass *createPrinterPass(raw_ostream &O, const std::string &Banner) const;
@@ -308,19 +297,8 @@
   ///
   virtual bool doFinalization(Module &);
 
-  /// runOnModule - On a module, we run this pass by initializing,
-  /// ronOnFunction'ing once for every function in the module, then by
-  /// finalizing.
-  ///
-  virtual bool runOnModule(Module &M);
-
-  /// run - On a function, we simply initialize, run the function, then
-  /// finalize.
-  ///
-  bool run(Function &F);
-
   virtual void assignPassManager(PMStack &PMS, 
-                                 PassManagerType T = PMT_FunctionPassManager);
+                                 PassManagerType T);
 
   ///  Return what kind of Pass Manager can manage this pass.
   virtual PassManagerType getPotentialPassManagerType() const;
@@ -340,8 +318,7 @@
 ///
 class BasicBlockPass : public Pass {
 public:
-  explicit BasicBlockPass(intptr_t pid) : Pass(PT_BasicBlock, pid) {}
-  explicit BasicBlockPass(const void *pid) : Pass(PT_BasicBlock, pid) {}
+  explicit BasicBlockPass(char &pid) : Pass(PT_BasicBlock, pid) {}
 
   /// createPrinterPass - Get a function printer pass.
   Pass *createPrinterPass(raw_ostream &O, const std::string &Banner) const;
@@ -371,14 +348,8 @@
   ///
   virtual bool doFinalization(Module &);
 
-
-  // To run this pass on a function, we simply call runOnBasicBlock once for
-  // each function.
-  //
-  bool runOnFunction(Function &F);
-
   virtual void assignPassManager(PMStack &PMS, 
-                                 PassManagerType T = PMT_BasicBlockPassManager);
+                                 PassManagerType T);
 
   ///  Return what kind of Pass Manager can manage this pass.
   virtual PassManagerType getPotentialPassManagerType() const;

Modified: llvm/branches/wendling/eh/include/llvm/PassAnalysisSupport.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/PassAnalysisSupport.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/PassAnalysisSupport.h (original)
+++ llvm/branches/wendling/eh/include/llvm/PassAnalysisSupport.h Tue Oct 26 19:48:03 2010
@@ -19,7 +19,6 @@
 #ifndef LLVM_PASS_ANALYSIS_SUPPORT_H
 #define LLVM_PASS_ANALYSIS_SUPPORT_H
 
-#include "llvm/Pass.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
 #include <vector>
@@ -49,34 +48,37 @@
   // addRequired - Add the specified ID to the required set of the usage info
   // for a pass.
   //
-  AnalysisUsage &addRequiredID(AnalysisID ID);
+  AnalysisUsage &addRequiredID(const void *ID);
+  AnalysisUsage &addRequiredID(char &ID);
   template<class PassClass>
   AnalysisUsage &addRequired() {
-    return addRequiredID(Pass::getClassPassInfo<PassClass>());
+    return addRequiredID(PassClass::ID);
   }
 
-  AnalysisUsage &addRequiredTransitiveID(AnalysisID ID);
+  AnalysisUsage &addRequiredTransitiveID(char &ID);
   template<class PassClass>
   AnalysisUsage &addRequiredTransitive() {
-    AnalysisID ID = Pass::getClassPassInfo<PassClass>();
-    return addRequiredTransitiveID(ID);
+    return addRequiredTransitiveID(PassClass::ID);
   }
 
   // addPreserved - Add the specified ID to the set of analyses preserved by
   // this pass
   //
-  AnalysisUsage &addPreservedID(AnalysisID ID) {
+  AnalysisUsage &addPreservedID(const void *ID) {
     Preserved.push_back(ID);
     return *this;
   }
+  AnalysisUsage &addPreservedID(char &ID) {
+    Preserved.push_back(&ID);
+    return *this;
+  }
 
   // addPreserved - Add the specified Pass class to the set of analyses
   // preserved by this pass.
   //
   template<class PassClass>
   AnalysisUsage &addPreserved() {
-    assert(Pass::getClassPassInfo<PassClass>() && "Pass class not registered!");
-    Preserved.push_back(Pass::getClassPassInfo<PassClass>());
+    Preserved.push_back(&PassClass::ID);
     return *this;
   }
 
@@ -85,12 +87,7 @@
   // This can be useful when a pass is trivially preserved, but may not be
   // linked in. Be careful about spelling!
   //
-  AnalysisUsage &addPreserved(StringRef Arg) {
-    const PassInfo *PI = Pass::lookupPassInfo(Arg);
-    // If the pass exists, preserve it. Otherwise silently do nothing.
-    if (PI) Preserved.push_back(PI);
-    return *this;
-  }
+  AnalysisUsage &addPreserved(StringRef Arg);
 
   // setPreservesAll - Set by analyses that do not transform their input at all
   void setPreservesAll() { PreservesAll = true; }
@@ -130,7 +127,7 @@
   inline PMDataManager &getPMDataManager() { return PM; }
 
   // Find pass that is implementing PI.
-  Pass *findImplPass(const PassInfo *PI) {
+  Pass *findImplPass(AnalysisID PI) {
     Pass *ResultPass = 0;
     for (unsigned i = 0; i < AnalysisImpls.size() ; ++i) {
       if (AnalysisImpls[i].first == PI) {
@@ -142,10 +139,10 @@
   }
 
   // Find pass that is implementing PI. Initialize pass for Function F.
-  Pass *findImplPass(Pass *P, const PassInfo *PI, Function &F);
+  Pass *findImplPass(Pass *P, AnalysisID PI, Function &F);
 
-  void addAnalysisImplsPair(const PassInfo *PI, Pass *P) {
-    std::pair<const PassInfo*, Pass*> pir = std::make_pair(PI,P);
+  void addAnalysisImplsPair(AnalysisID PI, Pass *P) {
+    std::pair<AnalysisID, Pass*> pir = std::make_pair(PI,P);
     AnalysisImpls.push_back(pir);
   }
 
@@ -158,11 +155,11 @@
   // getAnalysisIfAvailable - Return analysis result or null if it doesn't exist
   Pass *getAnalysisIfAvailable(AnalysisID ID, bool Direction) const;
 
+private:
   // AnalysisImpls - This keeps track of which passes implements the interfaces
   // that are required by the current pass (to implement getAnalysis()).
-  std::vector<std::pair<const PassInfo*, Pass*> > AnalysisImpls;
+  std::vector<std::pair<AnalysisID, Pass*> > AnalysisImpls;
 
-private:
   // PassManager that is used to resolve analysis info
   PMDataManager &PM;
 };
@@ -179,8 +176,7 @@
 AnalysisType *Pass::getAnalysisIfAvailable() const {
   assert(Resolver && "Pass not resident in a PassManager object!");
 
-  const PassInfo *PI = getClassPassInfo<AnalysisType>();
-  if (PI == 0) return 0;
+  const void *PI = &AnalysisType::ID;
 
   Pass *ResultPass = Resolver->getAnalysisIfAvailable(PI, true);
   if (ResultPass == 0) return 0;
@@ -199,11 +195,11 @@
 template<typename AnalysisType>
 AnalysisType &Pass::getAnalysis() const {
   assert(Resolver && "Pass has not been inserted into a PassManager object!");
-  return getAnalysisID<AnalysisType>(getClassPassInfo<AnalysisType>());
+  return getAnalysisID<AnalysisType>(&AnalysisType::ID);
 }
 
 template<typename AnalysisType>
-AnalysisType &Pass::getAnalysisID(const PassInfo *PI) const {
+AnalysisType &Pass::getAnalysisID(AnalysisID PI) const {
   assert(PI && "getAnalysis for unregistered pass!");
   assert(Resolver&&"Pass has not been inserted into a PassManager object!");
   // PI *must* appear in AnalysisImpls.  Because the number of passes used
@@ -229,11 +225,11 @@
 AnalysisType &Pass::getAnalysis(Function &F) {
   assert(Resolver &&"Pass has not been inserted into a PassManager object!");
 
-  return getAnalysisID<AnalysisType>(getClassPassInfo<AnalysisType>(), F);
+  return getAnalysisID<AnalysisType>(&AnalysisType::ID, F);
 }
 
 template<typename AnalysisType>
-AnalysisType &Pass::getAnalysisID(const PassInfo *PI, Function &F) {
+AnalysisType &Pass::getAnalysisID(AnalysisID PI, Function &F) {
   assert(PI && "getAnalysis for unregistered pass!");
   assert(Resolver && "Pass has not been inserted into a PassManager object!");
   // PI *must* appear in AnalysisImpls.  Because the number of passes used

Modified: llvm/branches/wendling/eh/include/llvm/PassManager.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/PassManager.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/PassManager.h (original)
+++ llvm/branches/wendling/eh/include/llvm/PassManager.h Tue Oct 26 19:48:03 2010
@@ -22,7 +22,6 @@
 namespace llvm {
 
 class Pass;
-class ModulePass;
 class Module;
 
 class PassManagerImpl;

Modified: llvm/branches/wendling/eh/include/llvm/PassManagers.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/PassManagers.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/PassManagers.h (original)
+++ llvm/branches/wendling/eh/include/llvm/PassManagers.h Tue Oct 26 19:48:03 2010
@@ -14,11 +14,11 @@
 #ifndef LLVM_PASSMANAGERS_H
 #define LLVM_PASSMANAGERS_H
 
-#include "llvm/PassManager.h"
+#include "llvm/Pass.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/DenseMap.h"
-#include <deque>
+#include <vector>
 #include <map>
 
 //===----------------------------------------------------------------------===//
@@ -96,14 +96,8 @@
   class StringRef;
   class Value;
   class Timer;
+  class PMDataManager;
 
-/// FunctionPassManager and PassManager, two top level managers, serve 
-/// as the public interface of pass manager infrastructure.
-enum TopLevelManagerType {
-  TLM_Function,  // FunctionPassManager
-  TLM_Pass       // PassManager
-};
-    
 // enums for debugging strings
 enum PassDebuggingString {
   EXECUTION_MSG, // "Executing Pass '"
@@ -112,6 +106,7 @@
   ON_BASICBLOCK_MSG, // "'  on BasicBlock '" + PassName + "'...\n"
   ON_FUNCTION_MSG, // "' on Function '" + FunctionName + "'...\n"
   ON_MODULE_MSG, // "' on Module '" + ModuleName + "'...\n"
+  ON_REGION_MSG, // " 'on Region ...\n'"
   ON_LOOP_MSG, // " 'on Loop ...\n'"
   ON_CG_MSG // "' on Call Graph ...\n'"
 };  
@@ -138,30 +133,28 @@
 //===----------------------------------------------------------------------===//
 // PMStack
 //
-/// PMStack
+/// PMStack - This class implements a stack data structure of PMDataManager
+/// pointers.
+///
 /// Top level pass managers (see PassManager.cpp) maintain active Pass Managers 
 /// using PMStack. Each Pass implements assignPassManager() to connect itself
 /// with appropriate manager. assignPassManager() walks PMStack to find
 /// suitable manager.
-///
-/// PMStack is just a wrapper around standard deque that overrides pop() and
-/// push() methods.
 class PMStack {
 public:
-  typedef std::deque<PMDataManager *>::reverse_iterator iterator;
-  iterator begin() { return S.rbegin(); }
-  iterator end() { return S.rend(); }
-
-  void handleLastUserOverflow();
+  typedef std::vector<PMDataManager *>::const_reverse_iterator iterator;
+  iterator begin() const { return S.rbegin(); }
+  iterator end() const { return S.rend(); }
 
   void pop();
-  inline PMDataManager *top() { return S.back(); }
+  PMDataManager *top() const { return S.back(); }
   void push(PMDataManager *PM);
-  inline bool empty() { return S.empty(); }
+  bool empty() const { return S.empty(); }
+
+  void dump() const;
 
-  void dump();
 private:
-  std::deque<PMDataManager *> S;
+  std::vector<PMDataManager *> S;
 };
 
 
@@ -171,26 +164,31 @@
 /// PMTopLevelManager manages LastUser info and collects common APIs used by
 /// top level pass managers.
 class PMTopLevelManager {
-public:
+protected:
+  explicit PMTopLevelManager(PMDataManager *PMDM);
 
   virtual unsigned getNumContainedManagers() const {
     return (unsigned)PassManagers.size();
   }
 
-  /// Schedule pass P for execution. Make sure that passes required by
-  /// P are run before P is run. Update analysis info maintained by
-  /// the manager. Remove dead passes. This is a recursive function.
-  void schedulePass(Pass *P);
+  void initializeAllAnalysisInfo();
 
+private:
   /// This is implemented by top level pass manager and used by 
   /// schedulePass() to add analysis info passes that are not available.
   virtual void addTopLevelPass(Pass  *P) = 0;
 
+public:
+  /// Schedule pass P for execution. Make sure that passes required by
+  /// P are run before P is run. Update analysis info maintained by
+  /// the manager. Remove dead passes. This is a recursive function.
+  void schedulePass(Pass *P);
+
   /// Set pass P as the last user of the given analysis passes.
-  void setLastUser(SmallVector<Pass *, 12> &AnalysisPasses, Pass *P);
+  void setLastUser(const SmallVectorImpl<Pass *> &AnalysisPasses, Pass *P);
 
   /// Collect passes whose last user is P
-  void collectLastUses(SmallVector<Pass *, 12> &LastUses, Pass *P);
+  void collectLastUses(SmallVectorImpl<Pass *> &LastUses, Pass *P);
 
   /// Find the pass that implements Analysis AID. Search immutable
   /// passes and all pass managers. If desired pass is not found
@@ -200,7 +198,6 @@
   /// Find analysis usage information for the pass P.
   AnalysisUsage *findAnalysisUsage(Pass *P);
 
-  explicit PMTopLevelManager(enum TopLevelManagerType t);
   virtual ~PMTopLevelManager(); 
 
   /// Add immutable pass and initialize it.
@@ -209,7 +206,7 @@
     ImmutablePasses.push_back(P);
   }
 
-  inline SmallVector<ImmutablePass *, 8>& getImmutablePasses() {
+  inline SmallVectorImpl<ImmutablePass *>& getImmutablePasses() {
     return ImmutablePasses;
   }
 
@@ -227,8 +224,6 @@
   void dumpPasses() const;
   void dumpArguments() const;
 
-  void initializeAllAnalysisInfo();
-
   // Active Pass Managers
   PMStack activeStack;
 
@@ -302,7 +297,7 @@
   /// through getAnalysis interface.
   virtual void addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass);
 
-  virtual Pass *getOnTheFlyPass(Pass *P, const PassInfo *PI, Function &F);
+  virtual Pass *getOnTheFlyPass(Pass *P, AnalysisID PI, Function &F);
 
   /// Initialize available analysis information.
   void initializeAnalysisInfo() { 
@@ -319,8 +314,8 @@
   /// Populate RequiredPasses with analysis pass that are required by
   /// pass P and are available. Populate ReqPassNotAvailable with analysis
   /// pass that are required by pass P but are not available.
-  void collectRequiredAnalysis(SmallVector<Pass *, 8> &RequiredPasses,
-                               SmallVector<AnalysisID, 8> &ReqPassNotAvailable,
+  void collectRequiredAnalysis(SmallVectorImpl<Pass *> &RequiredPasses,
+                               SmallVectorImpl<AnalysisID> &ReqPassNotAvailable,
                                Pass *P);
 
   /// All Required analyses should be available to the pass as it runs!  Here
@@ -414,7 +409,7 @@
 public:
   static char ID;
   explicit FPPassManager(int Depth) 
-  : ModulePass(&ID), PMDataManager(Depth) { }
+  : ModulePass(ID), PMDataManager(Depth) { }
   
   /// run - Execute all of the passes scheduled for execution.  Keep track of
   /// whether any of the passes modifies the module, and if so, return true.

Modified: llvm/branches/wendling/eh/include/llvm/PassRegistry.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/PassRegistry.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/PassRegistry.h (original)
+++ llvm/branches/wendling/eh/include/llvm/PassRegistry.h Tue Oct 26 19:48:03 2010
@@ -8,61 +8,74 @@
 //===----------------------------------------------------------------------===//
 //
 // This file defines PassRegistry, a class that is used in the initialization
-// and registration of passes.  At initialization, passes are registered with
-// the PassRegistry, which is later provided to the PassManager for dependency
-// resolution and similar tasks.
+// and registration of passes.  At application startup, passes are registered
+// with the PassRegistry, which is later provided to the PassManager for 
+// dependency resolution and similar tasks.
 //
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_PASSREGISTRY_H
 #define LLVM_PASSREGISTRY_H
 
-#include "llvm/ADT/StringMap.h"
-#include "llvm/System/DataTypes.h"
-#include "llvm/System/Mutex.h"
-#include <map>
-#include <set>
-#include <vector>
+#include "llvm/ADT/StringRef.h"
 
 namespace llvm {
 
 class PassInfo;
 struct PassRegistrationListener;
 
+/// PassRegistry - This class manages the registration and intitialization of
+/// the pass subsystem as application startup, and assists the PassManager
+/// in resolving pass dependencies.
+/// NOTE: PassRegistry is NOT thread-safe.  If you want to use LLVM on multiple
+/// threads simultaneously, you will need to use a separate PassRegistry on
+/// each thread.
 class PassRegistry {
-  /// Guards the contents of this class.
-  mutable sys::SmartMutex<true> Lock;
-  
-  /// PassInfoMap - Keep track of the PassInfo object for each registered pass.
-  typedef std::map<intptr_t, const PassInfo*> MapType;
-  MapType PassInfoMap;
-  
-  typedef StringMap<const PassInfo*> StringMapType;
-  StringMapType PassInfoStringMap;
-  
-  /// AnalysisGroupInfo - Keep track of information for each analysis group.
-  struct AnalysisGroupInfo {
-    std::set<const PassInfo *> Implementations;
-  };
-  std::map<const PassInfo*, AnalysisGroupInfo> AnalysisGroupInfoMap;
-  
-  std::vector<PassRegistrationListener*> Listeners;
-
+  mutable void *pImpl;
+  void *getImpl() const;
+   
 public:
+  PassRegistry() : pImpl(0) { }
+  ~PassRegistry();
+  
+  /// getPassRegistry - Access the global registry object, which is 
+  /// automatically initialized at application launch and destroyed by
+  /// llvm_shutdown.
   static PassRegistry *getPassRegistry();
   
-  const PassInfo *getPassInfo(intptr_t TI) const;
+  /// getPassInfo - Look up a pass' corresponding PassInfo, indexed by the pass'
+  /// type identifier (&MyPass::ID).
+  const PassInfo *getPassInfo(const void *TI) const;
+  
+  /// getPassInfo - Look up a pass' corresponding PassInfo, indexed by the pass'
+  /// argument string.
   const PassInfo *getPassInfo(StringRef Arg) const;
   
-  void registerPass(const PassInfo &PI);
+  /// registerPass - Register a pass (by means of its PassInfo) with the 
+  /// registry.  Required in order to use the pass with a PassManager.
+  void registerPass(const PassInfo &PI, bool ShouldFree = false);
+  
+  /// registerPass - Unregister a pass (by means of its PassInfo) with the 
+  /// registry.
   void unregisterPass(const PassInfo &PI);
   
-  /// Analysis Group Mechanisms.
-  void registerAnalysisGroup(intptr_t InterfaceID, intptr_t PassID,
-                             PassInfo& Registeree, bool isDefault);
+  /// registerAnalysisGroup - Register an analysis group (or a pass implementing
+  // an analysis group) with the registry.  Like registerPass, this is required 
+  // in order for a PassManager to be able to use this group/pass.
+  void registerAnalysisGroup(const void *InterfaceID, const void *PassID,
+                             PassInfo& Registeree, bool isDefault,
+                             bool ShouldFree = false);
   
+  /// enumerateWith - Enumerate the registered passes, calling the provided
+  /// PassRegistrationListener's passEnumerate() callback on each of them.
   void enumerateWith(PassRegistrationListener *L);
-  void addRegistrationListener(PassRegistrationListener* L);
+  
+  /// addRegistrationListener - Register the given PassRegistrationListener
+  /// to receive passRegistered() callbacks whenever a new pass is registered.
+  void addRegistrationListener(PassRegistrationListener *L);
+  
+  /// removeRegistrationListener - Unregister a PassRegistrationListener so that
+  /// it no longer receives passRegistered() callbacks.
   void removeRegistrationListener(PassRegistrationListener *L);
 };
 

Modified: llvm/branches/wendling/eh/include/llvm/PassSupport.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/PassSupport.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/PassSupport.h (original)
+++ llvm/branches/wendling/eh/include/llvm/PassSupport.h Tue Oct 26 19:48:03 2010
@@ -23,11 +23,12 @@
 
 #include "Pass.h"
 #include "llvm/PassRegistry.h"
+#include "llvm/InitializePasses.h"
+#include "llvm/System/Atomic.h"
+#include <vector>
 
 namespace llvm {
 
-class TargetMachine;
-
 //===---------------------------------------------------------------------------
 /// PassInfo class - An instance of this class exists for every pass known by
 /// the system, and can be obtained from a live Pass by calling its
@@ -41,7 +42,7 @@
 private:
   const char      *const PassName;     // Nice name for Pass
   const char      *const PassArgument; // Command Line argument to run this pass
-  const intptr_t  PassID;      
+  const void *PassID;      
   const bool IsCFGOnlyPass;            // Pass only looks at the CFG.
   const bool IsAnalysis;               // True if an analysis pass.
   const bool IsAnalysisGroup;          // True if an analysis group.
@@ -52,22 +53,18 @@
 public:
   /// PassInfo ctor - Do not call this directly, this should only be invoked
   /// through RegisterPass.
-  PassInfo(const char *name, const char *arg, intptr_t pi,
-           NormalCtor_t normal = 0,
-           bool isCFGOnly = false, bool is_analysis = false)
+  PassInfo(const char *name, const char *arg, const void *pi,
+           NormalCtor_t normal, bool isCFGOnly, bool is_analysis)
     : PassName(name), PassArgument(arg), PassID(pi), 
       IsCFGOnlyPass(isCFGOnly), 
-      IsAnalysis(is_analysis), IsAnalysisGroup(false), NormalCtor(normal) {
-    PassRegistry::getPassRegistry()->registerPass(*this);
-  }
+      IsAnalysis(is_analysis), IsAnalysisGroup(false), NormalCtor(normal) { }
   /// PassInfo ctor - Do not call this directly, this should only be invoked
   /// through RegisterPass. This version is for use by analysis groups; it
   /// does not auto-register the pass.
-  PassInfo(const char *name, intptr_t pi)
+  PassInfo(const char *name, const void *pi)
     : PassName(name), PassArgument(""), PassID(pi), 
       IsCFGOnlyPass(false), 
-      IsAnalysis(false), IsAnalysisGroup(true), NormalCtor(0) {
-  }
+      IsAnalysis(false), IsAnalysisGroup(true), NormalCtor(0) { }
 
   /// getPassName - Return the friendly name for the pass, never returns null
   ///
@@ -81,11 +78,11 @@
 
   /// getTypeInfo - Return the id object for the pass...
   /// TODO : Rename
-  intptr_t getTypeInfo() const { return PassID; }
+  const void *getTypeInfo() const { return PassID; }
 
   /// Return true if this PassID implements the specified ID pointer.
-  bool isPassID(void *IDPtr) const {
-    return PassID == (intptr_t)IDPtr;
+  bool isPassID(const void *IDPtr) const {
+    return PassID == IDPtr;
   }
   
   /// isAnalysisGroup - Return true if this is an analysis group, not a normal
@@ -132,8 +129,50 @@
   PassInfo(const PassInfo &);       // do not implement
 };
 
+#define CALL_ONCE_INITIALIZATION(function) \
+  static volatile sys::cas_flag initialized = 0; \
+  sys::cas_flag old_val = sys::CompareAndSwap(&initialized, 1, 0); \
+  if (old_val == 0) { \
+    function(Registry); \
+    sys::MemoryFence(); \
+    initialized = 2; \
+  } else { \
+    sys::cas_flag tmp = initialized; \
+    sys::MemoryFence(); \
+    while (tmp != 2) { \
+      tmp = initialized; \
+      sys::MemoryFence(); \
+    } \
+  }
+
 #define INITIALIZE_PASS(passName, arg, name, cfg, analysis) \
-  static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis)
+  static void* initialize##passName##PassOnce(PassRegistry &Registry) { \
+    PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
+      PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
+    Registry.registerPass(*PI, true); \
+    return PI; \
+  } \
+  void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
+    CALL_ONCE_INITIALIZATION(initialize##passName##PassOnce) \
+  }
+
+#define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis) \
+  static void* initialize##passName##PassOnce(PassRegistry &Registry) {
+
+#define INITIALIZE_PASS_DEPENDENCY(depName) \
+    initialize##depName##Pass(Registry);
+#define INITIALIZE_AG_DEPENDENCY(depName) \
+    initialize##depName##AnalysisGroup(Registry);
+
+#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis) \
+    PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
+      PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
+    Registry.registerPass(*PI, true); \
+    return PI; \
+  } \
+  void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
+    CALL_ONCE_INITIALIZATION(initialize##passName##PassOnce) \
+  }
 
 template<typename PassName>
 Pass *callDefaultCtor() { return new PassName(); }
@@ -161,10 +200,10 @@
   // Register Pass using default constructor...
   RegisterPass(const char *PassArg, const char *Name, bool CFGOnly = false,
                bool is_analysis = false)
-    : PassInfo(Name, PassArg, intptr_t(&passName::ID),
+    : PassInfo(Name, PassArg, &passName::ID,
                PassInfo::NormalCtor_t(callDefaultCtor<passName>),
                CFGOnly, is_analysis) {
-    
+    PassRegistry::getPassRegistry()->registerPass(*this);
   }
 };
 
@@ -189,10 +228,10 @@
 /// a nice name with the interface.
 ///
 class RegisterAGBase : public PassInfo {
-protected:
+public:
   RegisterAGBase(const char *Name,
-                 intptr_t InterfaceID,
-                 intptr_t PassID = 0,
+                 const void *InterfaceID,
+                 const void *PassID = 0,
                  bool isDefault = false);
 };
 
@@ -200,18 +239,61 @@
 struct RegisterAnalysisGroup : public RegisterAGBase {
   explicit RegisterAnalysisGroup(PassInfo &RPB)
     : RegisterAGBase(RPB.getPassName(),
-                     intptr_t(&Interface::ID), RPB.getTypeInfo(),
+                     &Interface::ID, RPB.getTypeInfo(),
                      Default) {
   }
 
   explicit RegisterAnalysisGroup(const char *Name)
-    : RegisterAGBase(Name, intptr_t(&Interface::ID)) {
+    : RegisterAGBase(Name, &Interface::ID) {
   }
 };
 
+#define INITIALIZE_ANALYSIS_GROUP(agName, name, defaultPass) \
+  static void* initialize##agName##AnalysisGroupOnce(PassRegistry &Registry) { \
+    initialize##defaultPass##Pass(Registry); \
+    PassInfo *AI = new PassInfo(name, & agName :: ID); \
+    Registry.registerAnalysisGroup(& agName ::ID, 0, *AI, false, true); \
+    return AI; \
+  } \
+  void llvm::initialize##agName##AnalysisGroup(PassRegistry &Registry) { \
+    CALL_ONCE_INITIALIZATION(initialize##agName##AnalysisGroupOnce) \
+  }
+
+
 #define INITIALIZE_AG_PASS(passName, agName, arg, name, cfg, analysis, def) \
-  static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis); \
-  static RegisterAnalysisGroup<agName, def> passName ## _ag(passName ## _info)
+  static void* initialize##passName##PassOnce(PassRegistry &Registry) { \
+    if (!def) initialize##agName##AnalysisGroup(Registry); \
+    PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
+      PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
+    Registry.registerPass(*PI, true); \
+    \
+    PassInfo *AI = new PassInfo(name, & agName :: ID); \
+    Registry.registerAnalysisGroup(& agName ::ID, & passName ::ID, \
+                                   *AI, def, true); \
+    return AI; \
+  } \
+  void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
+    CALL_ONCE_INITIALIZATION(initialize##passName##PassOnce) \
+  }
+
+
+#define INITIALIZE_AG_PASS_BEGIN(passName, agName, arg, n, cfg, analysis, def) \
+  static void* initialize##passName##PassOnce(PassRegistry &Registry) { \
+    if (!def) initialize##agName##AnalysisGroup(Registry);
+
+#define INITIALIZE_AG_PASS_END(passName, agName, arg, n, cfg, analysis, def) \
+    PassInfo *PI = new PassInfo(n, arg, & passName ::ID, \
+      PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
+    Registry.registerPass(*PI, true); \
+    \
+    PassInfo *AI = new PassInfo(n, & agName :: ID); \
+    Registry.registerAnalysisGroup(& agName ::ID, & passName ::ID, \
+                                   *AI, def, true); \
+    return AI; \
+  } \
+  void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
+    CALL_ONCE_INITIALIZATION(initialize##passName##PassOnce) \
+  }
 
 //===---------------------------------------------------------------------------
 /// PassRegistrationListener class - This class is meant to be derived from by

Modified: llvm/branches/wendling/eh/include/llvm/Support/Allocator.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/Allocator.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/Allocator.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/Allocator.h Tue Oct 26 19:48:03 2010
@@ -221,16 +221,12 @@
 inline void *operator new(size_t Size, llvm::BumpPtrAllocator &Allocator) {
   struct S {
     char c;
-#ifdef __GNUC__
-    char x __attribute__((aligned));
-#else
     union {
       double D;
       long double LD;
       long long L;
       void *P;
     } x;
-#endif
   };
   return Allocator.Allocate(Size, std::min((size_t)llvm::NextPowerOf2(Size),
                                            offsetof(S, x)));

Modified: llvm/branches/wendling/eh/include/llvm/Support/COFF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/COFF.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/COFF.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/COFF.h Tue Oct 26 19:48:03 2010
@@ -11,7 +11,7 @@
 //
 // Structures and enums defined within this file where created using
 // information from Microsoft's publicly available PE/COFF format document:
-// 
+//
 // Microsoft Portable Executable and Common Object File Format Specification
 // Revision 8.1 - February 15, 2008
 //
@@ -48,6 +48,11 @@
     uint16_t Characteristics;
   };
 
+  enum MachineTypes {
+    IMAGE_FILE_MACHINE_I386 = 0x14C,
+    IMAGE_FILE_MACHINE_AMD64 = 0x8664
+  };
+
   struct symbol {
     char     Name[NameSize];
     uint32_t Value;
@@ -64,7 +69,13 @@
     SF_ClassMask = 0x00FF0000,
     SF_ClassShift = 16,
 
-    SF_WeakReference = 0x01000000
+    SF_WeakExternal = 0x01000000
+  };
+
+  enum SymbolSectionNumber {
+    IMAGE_SYM_DEBUG     = -2,
+    IMAGE_SYM_ABSOLUTE  = -1,
+    IMAGE_SYM_UNDEFINED = 0
   };
 
   /// Storage class tells where and what the symbol represents
@@ -122,11 +133,11 @@
   };
 
   enum SymbolComplexType {
-    IMAGE_SYM_DTYPE_NULL     = 0, ///< No complex type; simple scalar variable. 
+    IMAGE_SYM_DTYPE_NULL     = 0, ///< No complex type; simple scalar variable.
     IMAGE_SYM_DTYPE_POINTER  = 1, ///< A pointer to base type.
     IMAGE_SYM_DTYPE_FUNCTION = 2, ///< A function that returns a base type.
     IMAGE_SYM_DTYPE_ARRAY    = 3, ///< An array of base type.
-    
+
     /// Type is formed as (base + (derived << SCT_COMPLEX_TYPE_SHIFT))
     SCT_COMPLEX_TYPE_SHIFT   = 4
   };
@@ -199,7 +210,25 @@
     IMAGE_REL_I386_SECREL   = 0x000B,
     IMAGE_REL_I386_TOKEN    = 0x000C,
     IMAGE_REL_I386_SECREL7  = 0x000D,
-    IMAGE_REL_I386_REL32    = 0x0014
+    IMAGE_REL_I386_REL32    = 0x0014,
+
+    IMAGE_REL_AMD64_ABSOLUTE  = 0x0000,
+    IMAGE_REL_AMD64_ADDR64    = 0x0001,
+    IMAGE_REL_AMD64_ADDR32    = 0x0002,
+    IMAGE_REL_AMD64_ADDR32NB  = 0x0003,
+    IMAGE_REL_AMD64_REL32     = 0x0004,
+    IMAGE_REL_AMD64_REL32_1   = 0x0005,
+    IMAGE_REL_AMD64_REL32_2   = 0x0006,
+    IMAGE_REL_AMD64_REL32_3   = 0x0007,
+    IMAGE_REL_AMD64_REL32_4   = 0x0008,
+    IMAGE_REL_AMD64_REL32_5   = 0x0009,
+    IMAGE_REL_AMD64_SECTION   = 0x000A,
+    IMAGE_REL_AMD64_SECREL    = 0x000B,
+    IMAGE_REL_AMD64_SECREL7   = 0x000C,
+    IMAGE_REL_AMD64_TOKEN     = 0x000D,
+    IMAGE_REL_AMD64_SREL32    = 0x000E,
+    IMAGE_REL_AMD64_PAIR      = 0x000F,
+    IMAGE_REL_AMD64_SSPAN32   = 0x0010
   };
 
   enum COMDATType {

Modified: llvm/branches/wendling/eh/include/llvm/Support/CallSite.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/CallSite.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/CallSite.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/CallSite.h Tue Oct 26 19:48:03 2010
@@ -57,7 +57,7 @@
     *this = get(II);
     assert(I.getPointer() && "Not a call?");
   }
-
+protected:
   /// CallSiteBase::get - This static method is sort of like a constructor.  It
   /// will create an appropriate call site for a Call or Invoke instruction, but
   /// it can also create a null initialized CallSiteBase object for something
@@ -72,7 +72,7 @@
     }
     return CallSiteBase();
   }
-
+public:
   /// isCall - true if a CallInst is enclosed.
   /// Note that !isCall() does not mean it is an InvokeInst enclosed,
   /// it also could signify a NULL Instruction pointer.
@@ -262,26 +262,13 @@
   }
 
   IterTy getCallee() const {
-    // FIXME: this is slow, since we do not have the fast versions of the op_*()
-    // functions here. See CallSite::getCallee.
-    if (isCall())
-      return getInstruction()->op_end() - 1; // Skip Callee
-    else
-      // An invoke.
-      return getInstruction()->op_end() - 4; // Skip PersFn, BB, BB, Function
+    if (isCall()) // Skip Callee
+      return cast<CallInst>(getInstruction())->op_end() - 1;
+    else // Skip PersFn, BB, BB, Callee
+      return cast<InvokeInst>(getInstruction())->op_end() - 4;
   }
 };
 
-/// ImmutableCallSite - establish a view to a call site for examination
-class ImmutableCallSite : public CallSiteBase<> {
-  typedef CallSiteBase<> Base;
-public:
-  ImmutableCallSite(const Value* V) : Base(V) {}
-  ImmutableCallSite(const CallInst *CI) : Base(CI) {}
-  ImmutableCallSite(const InvokeInst *II) : Base(II) {}
-  ImmutableCallSite(const Instruction *II) : Base(II) {}
-};
-
 class CallSite : public CallSiteBase<Function, Value, User, Instruction,
                                      CallInst, InvokeInst, User::op_iterator> {
   typedef CallSiteBase<Function, Value, User, Instruction,
@@ -296,16 +283,6 @@
 
   bool operator==(const CallSite &CS) const { return I == CS.I; }
   bool operator!=(const CallSite &CS) const { return I != CS.I; }
-
-  /// CallSite::get - This static method is sort of like a constructor.  It will
-  /// create an appropriate call site for a Call or Invoke instruction, but it
-  /// can also create a null initialized CallSite object for something which is
-  /// NOT a call site.
-  ///
-  static CallSite get(Value *V) {
-    return Base::get(V);
-  }
-
   bool operator<(const CallSite &CS) const {
     return getInstruction() < CS.getInstruction();
   }
@@ -314,6 +291,17 @@
   User::op_iterator getCallee() const;
 };
 
+/// ImmutableCallSite - establish a view to a call site for examination
+class ImmutableCallSite : public CallSiteBase<> {
+  typedef CallSiteBase<> Base;
+public:
+  ImmutableCallSite(const Value* V) : Base(V) {}
+  ImmutableCallSite(const CallInst *CI) : Base(CI) {}
+  ImmutableCallSite(const InvokeInst *II) : Base(II) {}
+  ImmutableCallSite(const Instruction *II) : Base(II) {}
+  ImmutableCallSite(CallSite CS) : Base(CS.getInstruction()) {}
+};
+
 } // End llvm namespace
 
 #endif

Modified: llvm/branches/wendling/eh/include/llvm/Support/Casting.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/Casting.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/Casting.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/Casting.h Tue Oct 26 19:48:03 2010
@@ -232,8 +232,8 @@
 // value is accepted.
 //
 template <class X, class Y>
-inline typename cast_retty<X, Y>::ret_type dyn_cast_or_null(const Y &Val) {
-  return (Val && isa<X>(Val)) ? cast<X, Y>(Val) : 0;
+inline typename cast_retty<X, Y*>::ret_type dyn_cast_or_null(Y *Val) {
+  return (Val && isa<X>(Val)) ? cast<X>(Val) : 0;
 }
 
 } // End llvm namespace

Modified: llvm/branches/wendling/eh/include/llvm/Support/CommandLine.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/CommandLine.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/CommandLine.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/CommandLine.h Tue Oct 26 19:48:03 2010
@@ -31,7 +31,7 @@
 #include <vector>
 
 namespace llvm {
-  
+
 /// cl Namespace - This namespace contains all of the command line option
 /// processing machinery.  It is intentionally a short name to make qualified
 /// usage concise.
@@ -443,16 +443,23 @@
 template <class DataType>
 class parser : public generic_parser_base {
 protected:
-  SmallVector<std::pair<const char *,
-                        std::pair<DataType, const char *> >, 8> Values;
+  class OptionInfo {
+  public:
+    OptionInfo(const char *name, DataType v, const char *helpStr) :
+      Name(name), V(v), HelpStr(helpStr) {}
+    const char *Name;
+    DataType V;
+    const char *HelpStr;
+  };
+  SmallVector<OptionInfo, 8> Values;
 public:
   typedef DataType parser_data_type;
 
   // Implement virtual functions needed by generic_parser_base
   unsigned getNumOptions() const { return unsigned(Values.size()); }
-  const char *getOption(unsigned N) const { return Values[N].first; }
+  const char *getOption(unsigned N) const { return Values[N].Name; }
   const char *getDescription(unsigned N) const {
-    return Values[N].second.second;
+    return Values[N].HelpStr;
   }
 
   // parse - Return true on error.
@@ -465,8 +472,8 @@
 
     for (unsigned i = 0, e = static_cast<unsigned>(Values.size());
          i != e; ++i)
-      if (Values[i].first == ArgVal) {
-        V = Values[i].second.first;
+      if (Values[i].Name == ArgVal) {
+        V = Values[i].V;
         return false;
       }
 
@@ -478,8 +485,8 @@
   template <class DT>
   void addLiteralOption(const char *Name, const DT &V, const char *HelpStr) {
     assert(findOption(Name) == Values.size() && "Option already exists!");
-    Values.push_back(std::make_pair(Name,
-                             std::make_pair(static_cast<DataType>(V),HelpStr)));
+    OptionInfo X(Name, static_cast<DataType>(V), HelpStr);
+    Values.push_back(X);
     MarkOptionsChanged();
   }
 
@@ -781,7 +788,7 @@
 
   DataType &getValue() { check(); return *Location; }
   const DataType &getValue() const { check(); return *Location; }
-  
+
   operator DataType() const { return this->getValue(); }
 };
 

Modified: llvm/branches/wendling/eh/include/llvm/Support/Compiler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/Compiler.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/Compiler.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/Compiler.h Tue Oct 26 19:48:03 2010
@@ -19,41 +19,42 @@
 /// into a shared library, then the class should be private to the library and
 /// not accessible from outside it.  Can also be used to mark variables and
 /// functions, making them private to any shared library they are linked into.
-
-/// LLVM_GLOBAL_VISIBILITY - If a class marked with this attribute is linked
-/// into a shared library, then the class will be accessible from outside the
-/// the library.  Can also be used to mark variables and functions, making them
-/// accessible from outside any shared library they are linked into.
 #if (__GNUC__ >= 4) && !defined(__MINGW32__) && !defined(__CYGWIN__)
 #define LLVM_LIBRARY_VISIBILITY __attribute__ ((visibility("hidden")))
-#define LLVM_GLOBAL_VISIBILITY __attribute__ ((visibility("default")))
 #else
 #define LLVM_LIBRARY_VISIBILITY
-#define LLVM_GLOBAL_VISIBILITY
 #endif
 
 #if (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
-#define ATTRIBUTE_USED __attribute__((__used__))
+#define LLVM_ATTRIBUTE_USED __attribute__((__used__))
 #else
-#define ATTRIBUTE_USED
+#define LLVM_ATTRIBUTE_USED
 #endif
 
+// Some compilers warn about unused functions. When a function is sometimes
+// used or not depending on build settings (e.g. a function only called from
+// within "assert"), this attribute can be used to suppress such warnings.
+//
+// However, it shouldn't be used for unused *variables*, as those have a much
+// more portable solution:
+//   (void)unused_var_name;
+// Prefer cast-to-void wherever it is sufficient.
 #if (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
-#define ATTRIBUTE_UNUSED __attribute__((__unused__))
+#define LLVM_ATTRIBUTE_UNUSED __attribute__((__unused__))
 #else
-#define ATTRIBUTE_UNUSED
+#define LLVM_ATTRIBUTE_UNUSED
 #endif
 
 #ifdef __GNUC__ // aka 'ATTRIBUTE_CONST' but following LLVM Conventions.
-#define ATTRIBUTE_READNONE __attribute__((__const__))
+#define LLVM_ATTRIBUTE_READNONE __attribute__((__const__))
 #else
-#define ATTRIBUTE_READNONE
+#define LLVM_ATTRIBUTE_READNONE
 #endif
 
 #ifdef __GNUC__  // aka 'ATTRIBUTE_PURE' but following LLVM Conventions.
-#define ATTRIBUTE_READONLY __attribute__((__pure__))
+#define LLVM_ATTRIBUTE_READONLY __attribute__((__pure__))
 #else
-#define ATTRIBUTE_READONLY
+#define LLVM_ATTRIBUTE_READONLY
 #endif
 
 #if (__GNUC__ >= 4)
@@ -75,34 +76,35 @@
 #define TEMPLATE_INSTANTIATION(X)
 #endif
 
-// DISABLE_INLINE - On compilers where we have a directive to do so, mark a
-// method "not for inlining".
+// LLVM_ATTRIBUTE_NOINLINE - On compilers where we have a directive to do so,
+// mark a method "not for inlining".
 #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-#define DISABLE_INLINE __attribute__((noinline))
+#define LLVM_ATTRIBUTE_NOINLINE __attribute__((noinline))
 #elif defined(_MSC_VER)
-#define DISABLE_INLINE __declspec(noinline)
+#define LLVM_ATTRIBUTE_NOINLINE __declspec(noinline)
 #else
-#define DISABLE_INLINE
+#define LLVM_ATTRIBUTE_NOINLINE
 #endif
 
-// ALWAYS_INLINE - On compilers where we have a directive to do so, mark a
-// method "always inline" because it is performance sensitive.
-// GCC 3.4 supported this but is buggy in various cases and produces
-// unimplemented errors, just use it in GCC 4.0 and later.
+// LLVM_ATTRIBUTE_ALWAYS_INLINE - On compilers where we have a directive to do
+// so, mark a method "always inline" because it is performance sensitive. GCC
+// 3.4 supported this but is buggy in various cases and produces unimplemented
+// errors, just use it in GCC 4.0 and later.
 #if __GNUC__ > 3
-#define ALWAYS_INLINE __attribute__((always_inline))
+#define LLVM_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline))
+#elif defined(_MSC_VER)
+#define LLVM_ATTRIBUTE_ALWAYS_INLINE __forceinline
 #else
-// TODO: No idea how to do this with MSVC.
-#define ALWAYS_INLINE
+#define LLVM_ATTRIBUTE_ALWAYS_INLINE
 #endif
 
 
 #ifdef __GNUC__
-#define NORETURN __attribute__((noreturn))
+#define LLVM_ATTRIBUTE_NORETURN __attribute__((noreturn))
 #elif defined(_MSC_VER)
-#define NORETURN __declspec(noreturn)
+#define LLVM_ATTRIBUTE_NORETURN __declspec(noreturn)
 #else
-#define NORETURN
+#define LLVM_ATTRIBUTE_NORETURN
 #endif
 
 #endif

Modified: llvm/branches/wendling/eh/include/llvm/Support/ConstantRange.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/ConstantRange.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/ConstantRange.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/ConstantRange.h Tue Oct 26 19:48:03 2010
@@ -41,8 +41,6 @@
 ///
 class ConstantRange {
   APInt Lower, Upper;
-  static ConstantRange intersect1Wrapped(const ConstantRange &LHS,
-                                         const ConstantRange &RHS);
 
 public:
   /// Initialize a full (the default) or empty set for the specified bit width.
@@ -94,6 +92,11 @@
   ///
   bool isWrappedSet() const;
 
+  /// isSignWrappedSet - Return true if this set wraps around the INT_MIN of
+  /// its bitwidth, for example: i8 [120, 140).
+  ///
+  bool isSignWrappedSet() const;
+
   /// contains - Return true if the specified value is in the set.
   ///
   bool contains(const APInt &Val) const;
@@ -196,39 +199,53 @@
   ConstantRange sextOrTrunc(uint32_t BitWidth) const;
 
   /// add - Return a new range representing the possible values resulting
-  /// from an addition of a value in this range and a value in Other.
+  /// from an addition of a value in this range and a value in \p Other.
   ConstantRange add(const ConstantRange &Other) const;
 
+  /// sub - Return a new range representing the possible values resulting
+  /// from a subtraction of a value in this range and a value in \p Other.
+  ConstantRange sub(const ConstantRange &Other) const;
+
   /// multiply - Return a new range representing the possible values resulting
-  /// from a multiplication of a value in this range and a value in Other.
+  /// from a multiplication of a value in this range and a value in \p Other.
   /// TODO: This isn't fully implemented yet.
   ConstantRange multiply(const ConstantRange &Other) const;
 
   /// smax - Return a new range representing the possible values resulting
-  /// from a signed maximum of a value in this range and a value in Other.
+  /// from a signed maximum of a value in this range and a value in \p Other.
   ConstantRange smax(const ConstantRange &Other) const;
 
   /// umax - Return a new range representing the possible values resulting
-  /// from an unsigned maximum of a value in this range and a value in Other.
+  /// from an unsigned maximum of a value in this range and a value in \p Other.
   ConstantRange umax(const ConstantRange &Other) const;
 
   /// udiv - Return a new range representing the possible values resulting
-  /// from an unsigned division of a value in this range and a value in Other.
-  /// TODO: This isn't fully implemented yet.
+  /// from an unsigned division of a value in this range and a value in
+  /// \p Other.
   ConstantRange udiv(const ConstantRange &Other) const;
 
+  /// binaryAnd - return a new range representing the possible values resulting
+  /// from a binary-and of a value in this range by a value in \p Other.
+  ConstantRange binaryAnd(const ConstantRange &Other) const;
+
+  /// binaryOr - return a new range representing the possible values resulting
+  /// from a binary-or of a value in this range by a value in \p Other.
+  ConstantRange binaryOr(const ConstantRange &Other) const;
+
   /// shl - Return a new range representing the possible values resulting
-  /// from a left shift of a value in this range by the Amount value.
-  ConstantRange shl(const ConstantRange &Amount) const;
+  /// from a left shift of a value in this range by a value in \p Other.
+  /// TODO: This isn't fully implemented yet.
+  ConstantRange shl(const ConstantRange &Other) const;
 
-  /// ashr - Return a new range representing the possible values resulting from
-  /// an arithmetic right shift of a value in this range by the Amount value.
-  ConstantRange ashr(const ConstantRange &Amount) const;
-
-  /// shr - Return a new range representing the possible values resulting
-  /// from a logical right shift of a value in this range by the Amount value.
-  ConstantRange lshr(const ConstantRange &Amount) const;
+  /// lshr - Return a new range representing the possible values resulting
+  /// from a logical right shift of a value in this range and a value in
+  /// \p Other.
+  ConstantRange lshr(const ConstantRange &Other) const;
 
+  /// inverse - Return a new range that is the logical not of the current set.
+  ///
+  ConstantRange inverse() const;
+  
   /// print - Print out the bounds to a stream...
   ///
   void print(raw_ostream &OS) const;

Modified: llvm/branches/wendling/eh/include/llvm/Support/CrashRecoveryContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/CrashRecoveryContext.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/CrashRecoveryContext.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/CrashRecoveryContext.h Tue Oct 26 19:48:03 2010
@@ -47,14 +47,16 @@
   CrashRecoveryContext() : Impl(0) {}
   ~CrashRecoveryContext();
 
-  /// \brief Enable crash recovery. This function is not thread safe, clients
-  /// should call it during startup or with a lock held.
+  /// \brief Enable crash recovery.
   static void Enable();
 
-  /// \brief Disable crash recovery. This function is not thread safe, clients
-  /// should call it during startup or with a lock held.
+  /// \brief Disable crash recovery.
   static void Disable();
 
+  /// \brief Return the active context, if the code is currently executing in a
+  /// thread which is in a protected context.
+  static CrashRecoveryContext *GetCurrent();
+
   /// \brief Execute the provide callback function (with the given arguments) in
   /// a protected context.
   ///

Modified: llvm/branches/wendling/eh/include/llvm/Support/DataFlow.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/DataFlow.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/DataFlow.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/DataFlow.h Tue Oct 26 19:48:03 2010
@@ -25,7 +25,7 @@
 
 template <> struct GraphTraits<const Value*> {
   typedef const Value NodeType;
-  typedef Value::use_const_iterator ChildIteratorType;
+  typedef Value::const_use_iterator ChildIteratorType;
 
   static NodeType *getEntryNode(const Value *G) {
     return G;

Modified: llvm/branches/wendling/eh/include/llvm/Support/Dwarf.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/Dwarf.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/Dwarf.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/Dwarf.h Tue Oct 26 19:48:03 2010
@@ -22,7 +22,8 @@
 // Debug info constants.
 
 enum {
-  LLVMDebugVersion = (8 << 16),         // Current version of debug information.
+  LLVMDebugVersion = (9 << 16),         // Current version of debug information.
+  LLVMDebugVersion8 = (8 << 16),         // Cconstant for version 8.
   LLVMDebugVersion7 = (7 << 16),        // Constant for version 7.
   LLVMDebugVersion6 = (6 << 16),        // Constant for version 6.
   LLVMDebugVersion5 = (5 << 16),        // Constant for version 5.
@@ -509,6 +510,7 @@
   DW_DSC_range = 0x01,
 
   // Line Number Standard Opcode Encodings
+  DW_LNS_extended_op = 0x00,
   DW_LNS_copy = 0x01,
   DW_LNS_advance_pc = 0x02,
   DW_LNS_advance_line = 0x03,

Modified: llvm/branches/wendling/eh/include/llvm/Support/ELF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/ELF.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/ELF.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/ELF.h Tue Oct 26 19:48:03 2010
@@ -126,21 +126,22 @@
 
 // Machine architectures
 enum {
-  EM_NONE = 0,  // No machine
-  EM_M32 = 1,   // AT&T WE 32100
-  EM_SPARC = 2, // SPARC
-  EM_386 = 3,   // Intel 386
-  EM_68K = 4,   // Motorola 68000
-  EM_88K = 5,   // Motorola 88000
-  EM_486 = 6,   // Intel 486 (deprecated)
-  EM_860 = 7,   // Intel 80860
-  EM_MIPS = 8,     // MIPS R3000
-  EM_PPC = 20,     // PowerPC
-  EM_PPC64 = 21,   // PowerPC64
-  EM_ARM = 40,     // ARM
-  EM_ALPHA = 41,   // DEC Alpha
-  EM_SPARCV9 = 43, // SPARC V9
-  EM_X86_64 = 62   // AMD64
+  EM_NONE = 0,      // No machine
+  EM_M32 = 1,       // AT&T WE 32100
+  EM_SPARC = 2,     // SPARC
+  EM_386 = 3,       // Intel 386
+  EM_68K = 4,       // Motorola 68000
+  EM_88K = 5,       // Motorola 88000
+  EM_486 = 6,       // Intel 486 (deprecated)
+  EM_860 = 7,       // Intel 80860
+  EM_MIPS = 8,      // MIPS R3000
+  EM_PPC = 20,      // PowerPC
+  EM_PPC64 = 21,    // PowerPC64
+  EM_ARM = 40,      // ARM
+  EM_ALPHA = 41,    // DEC Alpha
+  EM_SPARCV9 = 43,  // SPARC V9
+  EM_X86_64 = 62,   // AMD64
+  EM_MBLAZE = 47787 // Xilinx MicroBlaze
 };
 
 // Object file classes.
@@ -216,6 +217,27 @@
   R_X86_64_TLSDESC    = 36
 };
 
+// i386 relocations.
+// TODO: this is just a subset
+enum {
+  R_386_NONE          = 0,
+  R_386_32            = 1,
+  R_386_PC32          = 2,
+  R_386_GOT32         = 3,
+  R_386_PLT32         = 4,
+  R_386_COPY          = 5,
+  R_386_GLOB_DAT      = 6,
+  R_386_JUMP_SLOT     = 7,
+  R_386_RELATIVE      = 8,
+  R_386_GOTOFF        = 9,
+  R_386_GOTPC         = 10,
+  R_386_32PLT         = 11,
+  R_386_16            = 20,
+  R_386_PC16          = 21,
+  R_386_8             = 22,
+  R_386_PC8           = 23
+};
+
 // Section header.
 struct Elf32_Shdr {
   Elf32_Word sh_name;      // Section name (index into string table)
@@ -277,6 +299,16 @@
   SHT_LOOS          = 0x60000000, // Lowest operating system-specific type.
   SHT_HIOS          = 0x6fffffff, // Highest operating system-specific type.
   SHT_LOPROC        = 0x70000000, // Lowest processor architecture-specific type.
+  // Fixme: All this is duplicated in MCSectionELF. Why??
+  // Exception Index table
+  SHT_ARM_EXIDX           = 0x70000001U,
+  // BPABI DLL dynamic linking pre-emption map
+  SHT_ARM_PREEMPTMAP      = 0x70000002U,
+  //  Object file compatibility attributes
+  SHT_ARM_ATTRIBUTES      = 0x70000003U,
+  SHT_ARM_DEBUGOVERLAY    = 0x70000004U,
+  SHT_ARM_OVERLAYSECTION  = 0x70000005U,
+
   SHT_HIPROC        = 0x7fffffff, // Highest processor architecture-specific type.
   SHT_LOUSER        = 0x80000000, // Lowest type reserved for applications.
   SHT_HIUSER        = 0xffffffff  // Highest type reserved for applications.
@@ -330,6 +362,12 @@
   }
 };
 
+// The size (in bytes) of symbol table entries.
+enum {
+  SYMENTRY_SIZE32 = 16, // 32-bit symbol entry size
+  SYMENTRY_SIZE64 = 24  // 64-bit symbol entry size.
+};
+
 // Symbol bindings.
 enum {
   STB_LOCAL = 0,   // Local symbol, not visible outside obj file containing def

Modified: llvm/branches/wendling/eh/include/llvm/Support/ErrorHandling.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/ErrorHandling.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/ErrorHandling.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/ErrorHandling.h Tue Oct 26 19:48:03 2010
@@ -52,6 +52,18 @@
   /// llvm_stop_multithreaded().
   void remove_fatal_error_handler();
 
+  /// ScopedFatalErrorHandler - This is a simple helper class which just
+  /// calls install_fatal_error_handler in its constructor and
+  /// remove_fatal_error_handler in its destructor.
+  struct ScopedFatalErrorHandler {
+    explicit ScopedFatalErrorHandler(fatal_error_handler_t handler,
+                                     void *user_data = 0) {
+      install_fatal_error_handler(handler, user_data);
+    }
+
+    ~ScopedFatalErrorHandler() { remove_fatal_error_handler(); }
+  };
+
   /// Reports a serious error, calling any installed error handler. These
   /// functions are intended to be used for error conditions which are outside
   /// the control of the compiler (I/O errors, invalid user input, etc.)
@@ -60,15 +72,16 @@
   /// standard error, followed by a newline.
   /// After the error handler is called this function will call exit(1), it 
   /// does not return.
-  NORETURN void report_fatal_error(const char *reason);
-  NORETURN void report_fatal_error(const std::string &reason);
-  NORETURN void report_fatal_error(const Twine &reason);
+  LLVM_ATTRIBUTE_NORETURN void report_fatal_error(const char *reason);
+  LLVM_ATTRIBUTE_NORETURN void report_fatal_error(const std::string &reason);
+  LLVM_ATTRIBUTE_NORETURN void report_fatal_error(const Twine &reason);
 
   /// This function calls abort(), and prints the optional message to stderr.
   /// Use the llvm_unreachable macro (that adds location info), instead of
   /// calling this function directly.
-  NORETURN void llvm_unreachable_internal(const char *msg=0,
-                                          const char *file=0, unsigned line=0);
+  LLVM_ATTRIBUTE_NORETURN void llvm_unreachable_internal(const char *msg=0,
+                                                         const char *file=0,
+                                                         unsigned line=0);
 }
 
 /// Prints the message and location info to stderr in !NDEBUG builds.

Modified: llvm/branches/wendling/eh/include/llvm/Support/GraphWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/GraphWriter.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/GraphWriter.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/GraphWriter.h Tue Oct 26 19:48:03 2010
@@ -89,14 +89,28 @@
 
 public:
   GraphWriter(raw_ostream &o, const GraphType &g, bool SN) : O(o), G(g) {
-  DTraits = DOTTraits(SN); 
-}
+    DTraits = DOTTraits(SN);
+  }
+
+  void writeGraph(const std::string &Title = "") {
+    // Output the header for the graph...
+    writeHeader(Title);
+
+    // Emit all of the nodes in the graph...
+    writeNodes();
+
+    // Output any customizations on the graph
+    DOTGraphTraits<GraphType>::addCustomGraphFeatures(G, *this);
 
-  void writeHeader(const std::string &Name) {
+    // Output the end of the graph
+    writeFooter();
+  }
+
+  void writeHeader(const std::string &Title) {
     std::string GraphName = DTraits.getGraphName(G);
 
-    if (!Name.empty())
-      O << "digraph \"" << DOT::EscapeString(Name) << "\" {\n";
+    if (!Title.empty())
+      O << "digraph \"" << DOT::EscapeString(Title) << "\" {\n";
     else if (!GraphName.empty())
       O << "digraph \"" << DOT::EscapeString(GraphName) << "\" {\n";
     else
@@ -105,8 +119,8 @@
     if (DTraits.renderGraphFromBottomUp())
       O << "\trankdir=\"BT\";\n";
 
-    if (!Name.empty())
-      O << "\tlabel=\"" << DOT::EscapeString(Name) << "\";\n";
+    if (!Title.empty())
+      O << "\tlabel=\"" << DOT::EscapeString(Title) << "\";\n";
     else if (!GraphName.empty())
       O << "\tlabel=\"" << DOT::EscapeString(GraphName) << "\";\n";
     O << DTraits.getGraphProperties(G);
@@ -282,22 +296,13 @@
 template<typename GraphType>
 raw_ostream &WriteGraph(raw_ostream &O, const GraphType &G,
                         bool ShortNames = false,
-                        const std::string &Name = "",
                         const std::string &Title = "") {
   // Start the graph emission process...
   GraphWriter<GraphType> W(O, G, ShortNames);
 
-  // Output the header for the graph...
-  W.writeHeader(Title);
-
-  // Emit all of the nodes in the graph...
-  W.writeNodes();
-
-  // Output any customizations on the graph
-  DOTGraphTraits<GraphType>::addCustomGraphFeatures(G, W);
+  // Emit the graph.
+  W.writeGraph(Title);
 
-  // Output the end of the graph
-  W.writeFooter();
   return O;
 }
 
@@ -322,7 +327,7 @@
   raw_fd_ostream O(Filename.c_str(), ErrorInfo);
 
   if (ErrorInfo.empty()) {
-    WriteGraph(O, G, ShortNames, Name, Title);
+    llvm::WriteGraph(O, G, ShortNames, Title);
     errs() << " done. \n";
   } else {
     errs() << "error opening file '" << Filename.str() << "' for writing!\n";
@@ -339,7 +344,7 @@
 void ViewGraph(const GraphType &G, const std::string &Name,
                bool ShortNames = false, const std::string &Title = "",
                GraphProgram::Name Program = GraphProgram::DOT) {
-  sys::Path Filename = WriteGraph(G, Name, ShortNames, Title);
+  sys::Path Filename = llvm::WriteGraph(G, Name, ShortNames, Title);
 
   if (Filename.isEmpty())
     return;

Modified: llvm/branches/wendling/eh/include/llvm/Support/IRReader.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/IRReader.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/IRReader.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/IRReader.h Tue Oct 26 19:48:03 2010
@@ -60,8 +60,7 @@
     MemoryBuffer *F = MemoryBuffer::getFileOrSTDIN(Filename.c_str(), &ErrMsg);
     if (F == 0) {
       Err = SMDiagnostic(Filename, 
-                         "Could not open input file "
-                         "'" + Filename + "': " + ErrMsg);
+                         "Could not open input file: " + ErrMsg);
       return 0;
     }
 
@@ -99,8 +98,7 @@
     MemoryBuffer *F = MemoryBuffer::getFileOrSTDIN(Filename.c_str(), &ErrMsg);
     if (F == 0) {
       Err = SMDiagnostic(Filename, 
-                         "Could not open input file "
-                         "'" + Filename + "': " + ErrMsg);
+                         "Could not open input file: " + ErrMsg);
       return 0;
     }
 

Modified: llvm/branches/wendling/eh/include/llvm/Support/ManagedStatic.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/ManagedStatic.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/ManagedStatic.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/ManagedStatic.h Tue Oct 26 19:48:03 2010
@@ -91,12 +91,6 @@
   }
 };
 
-template<void (*CleanupFn)(void*)>
-class ManagedCleanup : public ManagedStaticBase {
-public:
-  void Register() { RegisterManagedStatic(0, CleanupFn); }
-};
-
 /// llvm_shutdown - Deallocate and destroy all ManagedStatic variables.
 void llvm_shutdown();
 

Modified: llvm/branches/wendling/eh/include/llvm/Support/MathExtras.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/MathExtras.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/MathExtras.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/MathExtras.h Tue Oct 26 19:48:03 2010
@@ -15,6 +15,7 @@
 #define LLVM_SUPPORT_MATHEXTRAS_H
 
 #include "llvm/System/DataTypes.h"
+#include "llvm/System/SwapByteOrder.h"
 
 namespace llvm {
 
@@ -112,45 +113,19 @@
 /// ByteSwap_16 - This function returns a byte-swapped representation of the
 /// 16-bit argument, Value.
 inline uint16_t ByteSwap_16(uint16_t Value) {
-#if defined(_MSC_VER) && !defined(_DEBUG)
-  // The DLL version of the runtime lacks these functions (bug!?), but in a
-  // release build they're replaced with BSWAP instructions anyway.
-  return _byteswap_ushort(Value);
-#else
-  uint16_t Hi = Value << 8;
-  uint16_t Lo = Value >> 8;
-  return Hi | Lo;
-#endif
+  return sys::SwapByteOrder(Value);
 }
 
 /// ByteSwap_32 - This function returns a byte-swapped representation of the
 /// 32-bit argument, Value.
 inline uint32_t ByteSwap_32(uint32_t Value) {
-#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && !defined(__ICC)
-  return __builtin_bswap32(Value);
-#elif defined(_MSC_VER) && !defined(_DEBUG)
-  return _byteswap_ulong(Value);
-#else
-  uint32_t Byte0 = Value & 0x000000FF;
-  uint32_t Byte1 = Value & 0x0000FF00;
-  uint32_t Byte2 = Value & 0x00FF0000;
-  uint32_t Byte3 = Value & 0xFF000000;
-  return (Byte0 << 24) | (Byte1 << 8) | (Byte2 >> 8) | (Byte3 >> 24);
-#endif
+  return sys::SwapByteOrder(Value);
 }
 
 /// ByteSwap_64 - This function returns a byte-swapped representation of the
 /// 64-bit argument, Value.
 inline uint64_t ByteSwap_64(uint64_t Value) {
-#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && !defined(__ICC)
-  return __builtin_bswap64(Value);
-#elif defined(_MSC_VER) && !defined(_DEBUG)
-  return _byteswap_uint64(Value);
-#else
-  uint64_t Hi = ByteSwap_32(uint32_t(Value));
-  uint32_t Lo = ByteSwap_32(uint32_t(Value >> 32));
-  return (Hi << 32) | Lo;
-#endif
+  return sys::SwapByteOrder(Value);
 }
 
 /// CountLeadingZeros_32 - this function performs the platform optimal form of

Modified: llvm/branches/wendling/eh/include/llvm/Support/PassNameParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/PassNameParser.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/PassNameParser.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/PassNameParser.h Tue Oct 26 19:48:03 2010
@@ -23,11 +23,11 @@
 #ifndef LLVM_SUPPORT_PASS_NAME_PARSER_H
 #define LLVM_SUPPORT_PASS_NAME_PARSER_H
 
+#include "llvm/Pass.h"
+#include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/raw_ostream.h"
-#include "llvm/Pass.h"
-#include <algorithm>
 #include <cstring>
 
 namespace llvm {
@@ -42,8 +42,7 @@
 public:
   PassNameParser() : Opt(0) {}
   virtual ~PassNameParser();
-                         
-                         
+
   void initialize(cl::Option &O) {
     Opt = &O;
     cl::parser<const PassInfo*>::initialize(O);
@@ -77,20 +76,21 @@
   }
   virtual void passEnumerate(const PassInfo *P) { passRegistered(P); }
 
-  // ValLessThan - Provide a sorting comparator for Values elements...
-  typedef std::pair<const char*,
-                    std::pair<const PassInfo*, const char*> > ValType;
-  static bool ValLessThan(const ValType &VT1, const ValType &VT2) {
-    return std::string(VT1.first) < std::string(VT2.first);
-  }
-
   // printOptionInfo - Print out information about this option.  Override the
   // default implementation to sort the table before we print...
   virtual void printOptionInfo(const cl::Option &O, size_t GlobalWidth) const {
     PassNameParser *PNP = const_cast<PassNameParser*>(this);
-    std::sort(PNP->Values.begin(), PNP->Values.end(), ValLessThan);
+    array_pod_sort(PNP->Values.begin(), PNP->Values.end(), ValLessThan);
     cl::parser<const PassInfo*>::printOptionInfo(O, GlobalWidth);
   }
+
+private:
+  // ValLessThan - Provide a sorting comparator for Values elements...
+  static int ValLessThan(const void *VT1, const void *VT2) {
+    typedef PassNameParser::OptionInfo ValType;
+    return std::strcmp(static_cast<const ValType *>(VT1)->Name,
+                       static_cast<const ValType *>(VT2)->Name);
+  }
 };
 
 ///===----------------------------------------------------------------------===//

Modified: llvm/branches/wendling/eh/include/llvm/Support/PatternMatch.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/PatternMatch.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/PatternMatch.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/PatternMatch.h Tue Oct 26 19:48:03 2010
@@ -453,6 +453,13 @@
   }
 };
 
+/// m_BitCast
+template<typename OpTy>
+inline CastClass_match<OpTy, Instruction::BitCast>
+m_BitCast(const OpTy &Op) {
+  return CastClass_match<OpTy, Instruction::BitCast>(Op);
+}
+  
 /// m_PtrToInt
 template<typename OpTy>
 inline CastClass_match<OpTy, Instruction::PtrToInt>

Modified: llvm/branches/wendling/eh/include/llvm/Support/PrettyStackTrace.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/PrettyStackTrace.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/PrettyStackTrace.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/PrettyStackTrace.h Tue Oct 26 19:48:03 2010
@@ -24,10 +24,10 @@
   /// handlers which conflict with the ones installed by this module.
   /// Defaults to false.
   extern bool DisablePrettyStackTrace;
-  
+
   /// PrettyStackTraceEntry - This class is used to represent a frame of the
   /// "pretty" stack trace that is dumped when a program crashes. You can define
-  /// subclasses of this and declare them on the program stack: when they are 
+  /// subclasses of this and declare them on the program stack: when they are
   /// constructed and destructed, they will add their symbolic frames to a
   /// virtual stack trace.  This gets dumped out if the program crashes.
   class PrettyStackTraceEntry {
@@ -37,14 +37,14 @@
   public:
     PrettyStackTraceEntry();
     virtual ~PrettyStackTraceEntry();
-    
+
     /// print - Emit information about this stack frame to OS.
     virtual void print(raw_ostream &OS) const = 0;
-    
+
     /// getNextEntry - Return the next entry in the list of frames.
     const PrettyStackTraceEntry *getNextEntry() const { return NextEntry; }
   };
-  
+
   /// PrettyStackTraceString - This object prints a specified string (which
   /// should not contain newlines) to the stream as the stack trace when a crash
   /// occurs.
@@ -54,7 +54,7 @@
     PrettyStackTraceString(const char *str) : Str(str) {}
     virtual void print(raw_ostream &OS) const;
   };
-  
+
   /// PrettyStackTraceProgram - This object prints a specified program arguments
   /// to the stream as the stack trace when a crash occurs.
   class PrettyStackTraceProgram : public PrettyStackTraceEntry {
@@ -65,7 +65,7 @@
       : ArgC(argc), ArgV(argv) {}
     virtual void print(raw_ostream &OS) const;
   };
-  
+
 } // end namespace llvm
 
 #endif

Modified: llvm/branches/wendling/eh/include/llvm/Support/Regex.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/Regex.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/Regex.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/Regex.h Tue Oct 26 19:48:03 2010
@@ -11,6 +11,9 @@
 //
 //===----------------------------------------------------------------------===//
 
+#ifndef LLVM_SUPPORT_REGEX_H
+#define LLVM_SUPPORT_REGEX_H
+
 #include <string>
 
 struct llvm_regex;
@@ -18,7 +21,7 @@
 namespace llvm {
   class StringRef;
   template<typename T> class SmallVectorImpl;
-  
+
   class Regex {
   public:
     enum {
@@ -26,9 +29,9 @@
       /// Compile for matching that ignores upper/lower case distinctions.
       IgnoreCase=1,
       /// Compile for newline-sensitive matching. With this flag '[^' bracket
-      /// expressions and '.' never match newline. A ^ anchor matches the 
-      /// null string after any newline in the string in addition to its normal 
-      /// function, and the $ anchor matches the null string before any 
+      /// expressions and '.' never match newline. A ^ anchor matches the
+      /// null string after any newline in the string in addition to its normal
+      /// function, and the $ anchor matches the null string before any
       /// newline in the string in addition to its normal function.
       Newline=2
     };
@@ -47,7 +50,7 @@
     /// matches it contains.  The number filled in by match will include this
     /// many entries plus one for the whole regex (as element 0).
     unsigned getNumMatches() const;
-    
+
     /// matches - Match the regex against a given \arg String.
     ///
     /// \param Matches - If given, on a succesful match this will be filled in
@@ -74,3 +77,5 @@
     int error;
   };
 }
+
+#endif // LLVM_SUPPORT_REGEX_H

Removed: llvm/branches/wendling/eh/include/llvm/Support/SlowOperationInformer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/SlowOperationInformer.h?rev=117424&view=auto
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/SlowOperationInformer.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/SlowOperationInformer.h (removed)
@@ -1,65 +0,0 @@
-//===- llvm/Support/SlowOperationInformer.h - Keep user informed *- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines a simple object which can be used to let the user know what
-// is going on when a slow operation is happening, and gives them the ability to
-// cancel it.  Potentially slow operations can stack allocate one of these
-// objects, and periodically call the "progress" method to update the progress
-// bar.  If the operation takes more than 1 second to complete, the progress bar
-// is automatically shown and updated.  As such, the slow operation should not
-// print stuff to the screen, and should not be confused if an extra line
-// appears on the screen (ie, the cursor should be at the start of the line).
-//
-// If the user presses CTRL-C during the operation, the next invocation of the
-// progress method return true indicating that the operation was cancelled.
-//
-// Because SlowOperationInformers fiddle around with signals, they cannot be
-// nested, and interact poorly with threads.  The SIGALRM handler is set back to
-// SIGDFL, but the SIGINT signal handler is restored when the
-// SlowOperationInformer is destroyed.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_SUPPORT_SLOW_OPERATION_INFORMER_H
-#define LLVM_SUPPORT_SLOW_OPERATION_INFORMER_H
-
-#include <string>
-#include <cassert>
-#include "llvm/System/DataTypes.h"
-
-namespace llvm {
-  class SlowOperationInformer {
-    std::string OperationName;
-    unsigned LastPrintAmount;
-
-    SlowOperationInformer(const SlowOperationInformer&);   // DO NOT IMPLEMENT
-    void operator=(const SlowOperationInformer&);          // DO NOT IMPLEMENT
-  public:
-    explicit SlowOperationInformer(const std::string &Name);
-    ~SlowOperationInformer();
-
-    /// progress - Clients should periodically call this method when they can
-    /// handle cancellation.  The Amount variable should indicate how far
-    /// along the operation is, given in 1/10ths of a percent (in other words,
-    /// Amount should range from 0 to 1000).  If the user cancels the operation,
-    /// this returns true, false otherwise.
-    bool progress(unsigned Amount);
-
-    /// progress - Same as the method above, but this performs the division for
-    /// you, and helps you avoid overflow if you are dealing with largish
-    /// numbers.
-    bool progress(unsigned Current, unsigned Maximum) {
-      assert(Maximum != 0 &&
-             "Shouldn't be doing work if there is nothing to do!");
-      return progress(Current*uint64_t(1000UL)/Maximum);
-    }
-  };
-} // end namespace llvm
-
-#endif /* SLOW_OPERATION_INFORMER_H */

Modified: llvm/branches/wendling/eh/include/llvm/Support/SourceMgr.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/wendling/eh/include/llvm/Support/SourceMgr.h?rev=117425&r1=117424&r2=117425&view=diff
==============================================================================
--- llvm/branches/wendling/eh/include/llvm/Support/SourceMgr.h (original)
+++ llvm/branches/wendling/eh/include/llvm/Support/SourceMgr.h Tue Oct 26 19:48:03 2010
@@ -26,6 +26,7 @@
   class MemoryBuffer;
   class SourceMgr;
   class SMDiagnostic;
+  class Twine;
   class raw_ostream;
 
 /// SourceMgr - This owns the files read by a parser, handles include stacks,
@@ -125,7 +126,7 @@
   /// @param Type - If non-null, the kind of message (e.g., "error") which is
   /// prefixed to the message.
   /// @param ShowLine - Should the diagnostic show the source line.
-  void PrintMessage(SMLoc Loc, const std::string &Msg, const char *Type,
+  void PrintMessage(SMLoc Loc, const Twine &Msg, const char *Type,
                     bool ShowLine = true) const;
 
 
@@ -136,7 +137,7 @@
   /// prefixed to the message.
   /// @param ShowLine - Should the diagnostic show the source line.
   SMDiagnostic GetMessage(SMLoc Loc,
-                          const std::string &Msg, const char *Type,
+                          const Twine &Msg, const char *Type,
                           bool ShowLine = true) const;
 
 
@@ -161,8 +162,8 @@
   // Diagnostic with no location (e.g. file not found, command line arg error).
   SMDiagnostic(const std::string &filename, const std::string &Msg,
                bool showline = true)
-    : SM(0), Loc(), Filename(filename), LineNo(-1), ColumnNo(-1),
-      Message(Msg), LineContents(""), ShowLine(showline) {}
+    : SM(0), Filename(filename), LineNo(-1), ColumnNo(-1),
+      Message(Msg), ShowLine(showline) {}
   
   // Diagnostic with a location.
   SMDiagnostic(const SourceMgr &sm, SMLoc L, const std::string &FN,





More information about the llvm-branch-commits mailing list