llvm-3.1 includeの差分

メモ書き、完了。
興味が沸いたものはlibの下も読む必要がある。。

diff llvm-3.0 <--> llvm-3.1(trunk 04/07)
 ###############################################################################
 includeの下のみ比較
 
 > 追加ファイル
 < 削除ファイル
 | 変更があったもので興味深いもの
 
 
 見どころ、感想、その他
 -------------------------------------------------------------------------------
 
 (1) NamedMetadata
 ってのが追加されていたのですね。
 numberだけでなく、任意の名前が付けれるみたい
 
 (2) address sanitizer
 
 http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerAlgorithm
 a fast memory error detector.
 
 主に、asan.* 組み込み関数を挿入して、実行時に判定するのだと思う。
 
 上記asan系の組み込み関数は、compiler-rt/lib/asanが該当するはず
 
 (3) thread sanitizer
 
 http://code.google.com/p/data-race-test
 
 
 (4) machineinst bundles
 
 Support to model instruction bundling / packing.
 Hexagon向け
 
 (5) virtual anchor()
 
 将来的に何かに使うのかも。ほぼ全てのクラスに挿入されている。
 
 (6) codegenのregister周りにbitmaskを導入して、
 RegMaskが流行っているらしい
 
 lib/CodeGenの下はRegMaskですごいことになってる。。
 
 (7) llvm::createBBVectorizePass()を新規追加
 BB単位に動作するVectorizeが追加
 
 ARMだと性能劣化するよとかMLで見たけどどうなったんだろう。
 
 (8) Hexagonアーキテクチャ追加
 
 
 
 include/llvm
 *******************************************************************************
 
 ADT
 ===============================================================================
 
 > Hashing.h
 -------------------------------------------------------------------------------
   C++ interface用の高速なhashing
 
 > SparseSet.h
 -------------------------------------------------------------------------------
 
 
 > VariadicFunction.h
 -------------------------------------------------------------------------------
 
 < VectorExtras.h
 -------------------------------------------------------------------------------
 
 > edit_distance.h
 -------------------------------------------------------------------------------
  edit distance用の処理をStringRef.cppから外に出した
 
 Analysis
 ===============================================================================
 
 | DIBuilder.h
 -------------------------------------------------------------------------------
 DIObjCPropertyを追加してる
 
 
 | InlineCost.h
 -------------------------------------------------------------------------------
 大きく変わってるけど
 
 
 | Loads.h
 -------------------------------------------------------------------------------
 
 FindAvailableLoadedValue()の引数に、MDNode **TBAATagを追加
 
 
 | MemoryDependenceAnalysis
 -------------------------------------------------------------------------------
 追加
 AliasAnalysis::ModRefResult
 getModRefInfo(const Instruction *Inst, const AliasAnalysis::Location &Loc);
 
 
 
 | CaptureTracking.h
 -------------------------------------------------------------------------------
 変更
 
 | BranchProbabilityInfo.h
 -------------------------------------------------------------------------------
 大きくIFを変更
 
 
 | ScalarEvolution.h
 -------------------------------------------------------------------------------
 
 ChainedPhisっていうのが追加されてる
 
 | ValueTracking.h
 -------------------------------------------------------------------------------
 追加
 bool isSafeToSpeculativelyExecute()
 
 なんか面白そうだな
 
 
 Bitcode
 ===============================================================================
 
 LLVMBitCodes.h
 -------------------------------------------------------------------------------
 
 CODE_STRUCTやUnwindを使っているbitcodeは読み込み不可になったかな?
 
 ModuleCodes
   MODULE_CODE_FUNCTIONに、
   gc, unnamed_addrを新規追加
 
   MODULE_CODE_ALIASに、visibilityを追加
 
 Type Codes
   削除
   TYPE_CODE_STRUCT_OLD // STRUCT: [ispacked, eltty x N]
 
   削除対象入り
   TYPE_CODE_FUNCTION_OLD // FUNCTION: [vararg, attrid, retty, paramty x N]
 
   新規追加
   TYPE_CODE_FUNCTION //FUNCTION: [vararg, retty, paramty x N]
   TYPE_CODE_HALF //HALF
 
 ConstantsCodes
   新規追加
   CST_CODE_DATA // DATA [n x elements]
 
 
 FunctionCodes
   FUNC_CODE_INST_UNWINDが削除
 
 
 CodeGen
 ===============================================================================
 
 LinearScanが削除
 
 以下を追加
 MachineBlockReplacementPass
 MachineCopyPropagationPass
 
 MachineScheduler
 
 MachineSchedulerは、coalesとRAの間にやるらしい。
 今のところ、DAG後、RA前、RA後の3ヶ所にSchedulerが挿入可能と、、
 
 
 
 < BinaryObject.h
 -------------------------------------------------------------------------------
 
 | Analysis
 -------------------------------------------------------------------------------
 追加
 ISD::CondCode getFCmpCodeWithoutNaN(ISD::CondCode CC);
 
 
 > DFAPacketizer.h
 -------------------------------------------------------------------------------
 
 VLIWアーキテクチャ用のpacketizing mechanism
 
 
 
 | GCStrategy.h
 -------------------------------------------------------------------------------
 
 CustomSafePointsなるフラグが追加されている。
 
 | LinkAllCodegenComponents.h
 -------------------------------------------------------------------------------
 
 < DeadMachineInstructionElimPass
 < LinearScanRegisterAllocator
 < TDRRListDAGScheduler
 < TDListDAGScheduler
 > VLIWDAGScheduler
 
 VLIWはhexagon向けだろうか
 
 LinearScanはファイルごと削除。いままでお疲れ様です。
 
 
 | LiveInterval.h
 -------------------------------------------------------------------------------
 
 enumのREDEF_BY_ECが削除
 
 MachineInstr *copyメンバを追加して内部がすっきり
 他クラスのメソッドの引数にないっていたCopyMIが置き換わっている。
 
 | LiveIntervalAnalysis.h
 -------------------------------------------------------------------------------
 
 BitVector reservedRegs_ だと
 併せてMask操作のメソッドが追加
 
 LiveInterval系の処理は大きくリファクタリングされているのかも
 
 > LiveRangeEdit.h
 -------------------------------------------------------------------------------
 
 virtual registerのspill splitを操作するクラスっぽい
 
 
 > MachineInstrBundle.h
 -------------------------------------------------------------------------------
 
 MachineBasicBlock --> MachineInstr
     +--- MachineInstrBundle --^
 
 併せて、 MachineBasicBlock.hにも手が入っている。
 
 Bundleは、DFAPacketizer向けだろうか。
 ということは、VLIWかつhexagon向けか?
 
 いめーじ図
 /// isInsideBundle - Return true if MI is in a bundle (but not the first MI
 /// in a bundle).
 ///
 /// A bundle looks like this before it's finalized:
 ///   ----------------
 ///   |      MI      |
 ///   ----------------
 ///          |
 ///   ----------------
 ///   |      MI    * |
 ///   ----------------
 ///          |
 ///   ----------------
 ///   |      MI    * |
 ///   ----------------
 /// In this case, the first MI starts a bundle but is not inside a bundle, the
 /// next 2 MIs are considered "inside" the bundle.
 ///
 /// After a bundle is finalized, it looks like this:
 ///   ----------------
 ///   |    Bundle    |
 ///   ----------------
 ///          |
 ///   ----------------
 ///   |      MI    * |
 ///   ----------------
 ///          |
 ///   ----------------
 ///   |      MI    * |
 ///   ----------------
 ///          |
 ///   ----------------
 ///   |      MI    * |
 ///   ----------------
 /// The first instruction has the special opcode "BUNDLE". It's not "inside"
 /// a bundle, but the next three MIs are.
 
 
 > MachineScheduler.h
 -------------------------------------------------------------------------------
 
 RA前のScheduler
 
 < ObjectCodeEmitter.h
 -------------------------------------------------------------------------------
 
 > ResourcePriorityQueue.h
 -------------------------------------------------------------------------------
 
 VLIW向け
 
 > ScheduleDAGInstrs.h
 -------------------------------------------------------------------------------
 
 DAG用の処理をMachineSchedulerのために引っこ抜いてきたような
 
 
 | MachineInstr.h
 -------------------------------------------------------------------------------
 大幅追加
 
 
 
 | MachineRegisterInfo.h
 | MachineOperand.h
 -------------------------------------------------------------------------------
 MO_RegisterMaskが追加
 InternalReadってのが追加
 
 RegisterMask系を追加
 
 | ValueType
 -------------------------------------------------------------------------------
 
 f16が追加
 v2f16が追加
 
 
 ExecutionEngine
 ===============================================================================
 
 > IntelJITEventsWrapper.h
 -------------------------------------------------------------------------------
 
 > OProfileWrapper.h
 -------------------------------------------------------------------------------
 
 MC
 ===============================================================================
 
 > MCWinCOFFObjectWriter.h
 -------------------------------------------------------------------------------
 
 | MCAsmInfoCOFF.h
 -------------------------------------------------------------------------------
 
 MCAsmInfoMicrosoftとMCAsmInfoGNUCOFFを追加
 
 
 | MCCodeGenInfo.h
 -------------------------------------------------------------------------------
 
 CodeGenOpt::Levelを参照
 整理しただけで参照点はなし
 
 
 | MCContext.h
 -------------------------------------------------------------------------------
 Dwarf向けに大きく整理されてる
 
 | MCDwarf.h
 -------------------------------------------------------------------------------
 
 MCGenDwarfInfoクラスを追加
 
 
 
 | MCExpr.h
 -------------------------------------------------------------------------------
 
 VariantKindに
 Mips系が大きく追加されてる。
 
 ARM PPC Mipsはしっかりメンテされてるらしい
 
 | MCObjectFileInfo.h
 -------------------------------------------------------------------------------
 
 ObjCSectionなんかが追加されてる。
 
 OjbC向けメンテ
 
 
 
 Object
 ===============================================================================
 
 ちゃんとアーキテクチャごとに分けましたという
 
 > ELF.h
 -------------------------------------------------------------------------------
 
 
 Support
 ===============================================================================
 
 JSONとかYAMLとか追加された経緯がよくわからん。。
 
 >DataStream.h
 -------------------------------------------------------------------------------
 
 >DataTypes.h
 -------------------------------------------------------------------------------
 
 > JSONParser.h
 -------------------------------------------------------------------------------
 
 > LockFileManager.h
 -------------------------------------------------------------------------------
 
 > MDBUilder.h
 -------------------------------------------------------------------------------
 
 metadata builder
 
 > SaveAndRestore.h
 -------------------------------------------------------------------------------
 
 > StreamableMemoryObject.h
 -------------------------------------------------------------------------------
 
 > YAMLParser.h
 -------------------------------------------------------------------------------
 
 
 Target
 ===============================================================================
 
 | TargetLibraryInfo.h
 -------------------------------------------------------------------------------
 
 math系が大幅追加
 
 
 
 Transforms/Utils
 ===============================================================================
 
 < BasicInliner.h
 -------------------------------------------------------------------------------
 
 > CmpInstAnalysis.h
 -------------------------------------------------------------------------------
 
 ICmpのpredicateを3bit maskで表現するらしい
 
 predicateを畳み込む際に便利らしい
 
 
 | UnrollLoop.h
 -------------------------------------------------------------------------------
 UnrollRuntimeLoopPrologなるものが追加されている
 
 
 > ModuleUtils.h
 -------------------------------------------------------------------------------
 
 | IPO.h
 -------------------------------------------------------------------------------
 createAlwaysInlinerPass(bool InsertLifetime)
 
 いつぞやのバージョンからllvmのinlinerは
 inline展開した際に、lifetime intrinsicsを挿入するようになったけど。
 
 
 | Instrumentation.h
 -------------------------------------------------------------------------------
 
 AddressSanitizerPassが追加
 ModulePassぽい
 
 ThreadSanitizerPassが追加
 Race detectorらしい
 
 
 | Scalar.h
 -------------------------------------------------------------------------------
 GlobalMergePassが追加
 たぶん上記はARM専用の既存のPASSだったきが
 
 GEPSplitterPassが削除
 
 ObjCARCAPElimPassが追加
 
 > Vectorize.h
 -------------------------------------------------------------------------------
 
 BB単位でVectorizeする vectorizeBasicBlockが新規追加
 
 AliasAnalysisとScalarEvolutionをrequired、preservedする。
 
 Core
 ===============================================================================
 
 < DebugInfoProbe.h
 -------------------------------------------------------------------------------
 
 < IntrinsicsAlpha.td
 -------------------------------------------------------------------------------
 Alphaアーキテクチャが削除されたようなので、、
 
 
 > intrinsicsHexagon.td
 -------------------------------------------------------------------------------
 
 Hexagonアーキテクチャが追加されたようなので、、
 
 -------------------------------------------------------------------------------
 
 | Attributes.h
 -------------------------------------------------------------------------------
 
 | AddressSafetyが新規追加
 
 
 
 | Constants.h
 -------------------------------------------------------------------------------
 
 SequentialTypeなるものが追加されいる
 
 ConstantDataSequentialなる型が追加されてる。
 
 array or vector type用か
 
 aggregates(struct/array/vector)の扱いが強化されてるのかな。
 
 | InitializePasses.h
 -------------------------------------------------------------------------------
 
 新規追加
 Vectorization
 BranchFolder
 CodePlacementopt
 MachineCopyPropagationPass
 ExpandPostRAPass
 AddressSanitizerPass
 ThreadSanitizerPass
 GCinfoDeletePass
 GCMachineCodeAnalysisPass
 LocalStackSlotPassPass
 GlobalMerge
 MachineBlockPlacement
 MachineBlockPlacementStats
 MachineScheduler
 ObjCARCAPElim
 PostRAScheduler
 TailDuplicate
 TargetPassConfig
 UnpackMachineBundles
 FinalizeMachineBundles
 BBVectorize
 
 以下削除
 < LoopSplitterPass
 < RALinScan
 
 
 
 | Instructions.h
 -------------------------------------------------------------------------------
 
 UnwindInstの定義が消えた?
 
 
 | IntrinsicsX86.td
 -------------------------------------------------------------------------------
 
 主にHaswell対応のはず
 
 AVX2 追加
 
 BMI(Bit Manipulation Instructions) 追加
 
 FS/GS Base 追加
 FS ベースおよび GS ベースのレジスターの読み書きするための組み込み命令への対応
 
 Half float conversion 追加
 
 
 | LLVMContext.h
 -------------------------------------------------------------------------------
 
 MetaDataに以下を新規追加
 
 enum {
   MD_dbg = 0,  // "dbg"
   MD_tbaa = 1, // "tbaa"
   MD_prof = 2,  // "prof" <-- 新規追加ではなかったけど初耳だった。ProfileとってBranchの統計情報をやりとりするのにMetadata使うらしい
   MD_fpaccuracy = 3,  // "fpaccuracy"   <-- 現段階での使用はない
   MD_range = 4 // "range" <-- range解析情報 バックエンドにがっつい修正が入っている
 };
 
 | LinkAllPasses.h
 -------------------------------------------------------------------------------
 
 このファイルを見ればPass系の変更点は大まか把握できる。
 
 llvm::createObjCARCAPElimPass()を新規追加
 llvm::createBBVectorizePass()を新規追加
 
 APElimってなんぞって思ったら、ARC autorelease pool elimination らしい。
 
 
 | module.h
 -------------------------------------------------------------------------------
 ModuleFlagsってのが追加されたらしい
 
 emitcodeやLinkModuleなんかで参照しているが、具体的な使用方法はなし
 
 void getModuleFlagsMetadata(SmallVectorImpl<ModuleFlagEntry> &Flags) const;
 NamedMDNode *getModuleFlagsMetadata() const;
 NamedMDNode *getOrInsertModuleFlagsMetadata();
 void addModuleFlag(ModFlagBehavior Behavior, StringRef Key, Value *Val);
 void addModuleFlag(ModFlagBehavior Behavior, StringRef Key, uint32_t Val);
 void addModuleFlag(MDNode *Node);
 
 enum ModFlagBehavior { Error = 1, Warning  = 2, Require = 3, Override = 4 };
 
 struct ModuleFlagEntry {
   ModFlagBehavior Behavior;
   MDString *Key;
   Value *Val;
   ModuleFlagEntry(ModFlagBehavior B, MDString *K, Value *V)
     : Behavior(B), Key(K), Val(V) {}
 };
 
 
 | Type.h
 -------------------------------------------------------------------------------
 
 HalfTy(16bit floating point type)追加
 
 Helper methodsを追加
 子クラスにcastする手間が省けてデバッグが捗りそう。
 
 
 | User.h
 -------------------------------------------------------------------------------
 virtual void anchor()追加
 
 anchorは、新規に定義されたけど、特に実装はなし。
 
 Argument.h:  virtual void anchor();
 Constant.h:  virtual void anchor();
 Constants.h:  virtual void anchor();
 Constants.h:  virtual void anchor();
 Constants.h:  virtual void anchor();
 Constants.h:  virtual void anchor();
 InstrTypes.h:  virtual void anchor();
 Metadata.h:  virtual void anchor();
 User.h:  virtual void anchor();
 
 
 | Value.h
 -------------------------------------------------------------------------------
 ValueTyに、以下追加
 ConstantDataArrayVal
 ConstantDataVectorVal
 
 
 

  • 最終更新:2012-04-20 01:16:37

このWIKIを編集するにはパスワード入力が必要です

認証パスワード