Răsfoiți Sursa

Make hctdb output stable (#172)

David Peixotto 8 ani în urmă
părinte
comite
84c30e388d
3 a modificat fișierele cu 78 adăugiri și 77 ștergeri
  1. 45 45
      lib/HLSL/DxcOptimizer.cpp
  2. 29 29
      lib/HLSL/DxilOperations.cpp
  3. 4 3
      utils/hct/hctdb_instrhelp.py

+ 45 - 45
lib/HLSL/DxcOptimizer.cpp

@@ -276,63 +276,63 @@ static ArrayRef<LPCSTR> GetPassArgDescriptions(LPCSTR passName) {
 static bool IsPassOptionName(StringRef S) {
   /* <py::lines('ISPASSOPTIONNAME')>hctdb_instrhelp.get_is_pass_option_name()</py>*/
   // ISPASSOPTIONNAME:BEGIN
-  return S.equals("DL")
-    ||  S.equals("loop-distribute-verify")
-    ||  S.equals("lowerbitsets-avoid-reuse")
-    ||  S.equals("RequiresDomTree")
-    ||  S.equals("loop-distribute-non-if-convertible")
-    ||  S.equals("unroll-dynamic-cost-savings-discount")
-    ||  S.equals("ScalarLoadThreshold")
-    ||  S.equals("bonus-inst-threshold")
-    ||  S.equals("max-reroll-increment")
+  return S.equals("AllowPartial")
+    ||  S.equals("ArrayElementThreshold")
+    ||  S.equals("Count")
+    ||  S.equals("DL")
+    ||  S.equals("FatalErrors")
+    ||  S.equals("Ftor")
+    ||  S.equals("InlineThreshold")
+    ||  S.equals("InsertLifetime")
     ||  S.equals("MaxHeaderSize")
-    ||  S.equals("TIRA")
+    ||  S.equals("NotOptimized")
+    ||  S.equals("Os")
+    ||  S.equals("ReplaceAllVector")
+    ||  S.equals("RequiresDomTree")
     ||  S.equals("Runtime")
-    ||  S.equals("InsertLifetime")
-    ||  S.equals("mergefunc-sanity")
-    ||  S.equals("enable-scoped-noalias")
-    ||  S.equals("sroa-random-shuffle-slices")
+    ||  S.equals("ScalarLoadThreshold")
     ||  S.equals("StructMemberThreshold")
-    ||  S.equals("force-ssa-updater")
-    ||  S.equals("unroll-runtime")
-    ||  S.equals("noloads")
-    ||  S.equals("sroa-strict-inbounds")
-    ||  S.equals("reroll-num-tolerated-failed-matches")
-    ||  S.equals("Count")
-    ||  S.equals("float2int-max-integer-bw")
-    ||  S.equals("ReplaceAllVector")
-    ||  S.equals("likely-branch-weight")
-    ||  S.equals("ArrayElementThreshold")
-    ||  S.equals("no-discriminators")
-    ||  S.equals("sample-profile-file")
-    ||  S.equals("unroll-max-iteration-count-to-analyze")
+    ||  S.equals("TIRA")
     ||  S.equals("TLIImpl")
-    ||  S.equals("rotation-max-header-size")
+    ||  S.equals("Threshold")
+    ||  S.equals("bonus-inst-threshold")
+    ||  S.equals("disable-licm-promotion")
     ||  S.equals("enable-load-pre")
-    ||  S.equals("rewrite-map-file")
+    ||  S.equals("enable-pre")
+    ||  S.equals("enable-scoped-noalias")
+    ||  S.equals("enable-tbaa")
+    ||  S.equals("float2int-max-integer-bw")
+    ||  S.equals("force-ssa-updater")
     ||  S.equals("jump-threading-threshold")
-    ||  S.equals("unroll-count")
+    ||  S.equals("likely-branch-weight")
+    ||  S.equals("loop-distribute-non-if-convertible")
+    ||  S.equals("loop-distribute-verify")
     ||  S.equals("loop-unswitch-threshold")
-    ||  S.equals("Os")
+    ||  S.equals("lowerbitsets-avoid-reuse")
+    ||  S.equals("max-recurse-depth")
+    ||  S.equals("max-reroll-increment")
     ||  S.equals("maxElements")
-    ||  S.equals("InlineThreshold")
-    ||  S.equals("Ftor")
-    ||  S.equals("disable-licm-promotion")
-    ||  S.equals("unroll-percent-dynamic-cost-saved-threshold")
-    ||  S.equals("unroll-threshold")
-    ||  S.equals("vector-library")
-    ||  S.equals("AllowPartial")
+    ||  S.equals("mergefunc-sanity")
+    ||  S.equals("no-discriminators")
+    ||  S.equals("noloads")
     ||  S.equals("pragma-unroll-threshold")
+    ||  S.equals("reroll-num-tolerated-failed-matches")
+    ||  S.equals("rewrite-map-file")
+    ||  S.equals("rotation-max-header-size")
+    ||  S.equals("sample-profile-file")
     ||  S.equals("sample-profile-max-propagate-iterations")
-    ||  S.equals("max-recurse-depth")
-    ||  S.equals("FatalErrors")
-    ||  S.equals("Threshold")
+    ||  S.equals("sroa-random-shuffle-slices")
+    ||  S.equals("sroa-strict-inbounds")
     ||  S.equals("unlikely-branch-weight")
-    ||  S.equals("NotOptimized")
-    ||  S.equals("verify-debug-info")
     ||  S.equals("unroll-allow-partial")
-    ||  S.equals("enable-tbaa")
-    ||  S.equals("enable-pre");
+    ||  S.equals("unroll-count")
+    ||  S.equals("unroll-dynamic-cost-savings-discount")
+    ||  S.equals("unroll-max-iteration-count-to-analyze")
+    ||  S.equals("unroll-percent-dynamic-cost-saved-threshold")
+    ||  S.equals("unroll-runtime")
+    ||  S.equals("unroll-threshold")
+    ||  S.equals("vector-library")
+    ||  S.equals("verify-debug-info");
   // ISPASSOPTIONNAME:END
 }
 

+ 29 - 29
lib/HLSL/DxilOperations.cpp

@@ -720,6 +720,15 @@ llvm::Type *OP::GetOverloadType(OpCode OpCode, llvm::Function *F) {
 /* <py::lines('OPCODE-OLOAD-TYPES')>hctdb_instrhelp.get_funcs_oload_type()</py>*/
   switch (OpCode) {            // return     OpCode
   // OPCODE-OLOAD-TYPES:BEGIN
+  case OpCode::TempRegStore:
+    DXASSERT_NOMSG(FT->getNumParams() > 2);
+    return FT->getParamType(2);
+  case OpCode::MinPrecXRegStore:
+  case OpCode::StoreOutput:
+  case OpCode::BufferStore:
+  case OpCode::StorePatchConstant:
+    DXASSERT_NOMSG(FT->getNumParams() > 4);
+    return FT->getParamType(4);
   case OpCode::IsNaN:
   case OpCode::IsInf:
   case OpCode::IsFinite:
@@ -736,38 +745,9 @@ llvm::Type *OP::GetOverloadType(OpCode OpCode, llvm::Function *F) {
   case OpCode::WaveActiveAllEqual:
     DXASSERT_NOMSG(FT->getNumParams() > 1);
     return FT->getParamType(1);
-  case OpCode::TempRegStore:
-    DXASSERT_NOMSG(FT->getNumParams() > 2);
-    return FT->getParamType(2);
-  case OpCode::MinPrecXRegStore:
-  case OpCode::StoreOutput:
-  case OpCode::BufferStore:
-  case OpCode::StorePatchConstant:
-    DXASSERT_NOMSG(FT->getNumParams() > 4);
-    return FT->getParamType(4);
   case OpCode::TextureStore:
     DXASSERT_NOMSG(FT->getNumParams() > 5);
     return FT->getParamType(5);
-  case OpCode::MakeDouble:
-  case OpCode::SplitDouble:
-    return Type::getDoubleTy(m_Ctx);
-  case OpCode::CheckAccessFullyMapped:
-  case OpCode::AtomicBinOp:
-  case OpCode::AtomicCompareExchange:
-  case OpCode::SampleIndex:
-  case OpCode::Coverage:
-  case OpCode::InnerCoverage:
-  case OpCode::ThreadId:
-  case OpCode::GroupId:
-  case OpCode::ThreadIdInGroup:
-  case OpCode::FlattenedThreadIdInGroup:
-  case OpCode::GSInstanceID:
-  case OpCode::OutputControlPointID:
-  case OpCode::PrimitiveID:
-    return IntegerType::get(m_Ctx, 32);
-  case OpCode::CalculateLOD:
-  case OpCode::DomainLocation:
-    return Type::getFloatTy(m_Ctx);
   case OpCode::CreateHandle:
   case OpCode::BufferUpdateCounter:
   case OpCode::GetDimensions:
@@ -800,6 +780,26 @@ llvm::Type *OP::GetOverloadType(OpCode OpCode, llvm::Function *F) {
   case OpCode::WaveAllBitCount:
   case OpCode::WavePrefixBitCount:
     return Type::getVoidTy(m_Ctx);
+  case OpCode::CheckAccessFullyMapped:
+  case OpCode::AtomicBinOp:
+  case OpCode::AtomicCompareExchange:
+  case OpCode::SampleIndex:
+  case OpCode::Coverage:
+  case OpCode::InnerCoverage:
+  case OpCode::ThreadId:
+  case OpCode::GroupId:
+  case OpCode::ThreadIdInGroup:
+  case OpCode::FlattenedThreadIdInGroup:
+  case OpCode::GSInstanceID:
+  case OpCode::OutputControlPointID:
+  case OpCode::PrimitiveID:
+    return IntegerType::get(m_Ctx, 32);
+  case OpCode::CalculateLOD:
+  case OpCode::DomainLocation:
+    return Type::getFloatTy(m_Ctx);
+  case OpCode::MakeDouble:
+  case OpCode::SplitDouble:
+    return Type::getDoubleTy(m_Ctx);
   case OpCode::CBufferLoadLegacy:
   case OpCode::Sample:
   case OpCode::SampleBias:

+ 4 - 3
utils/hct/hctdb_instrhelp.py

@@ -1,6 +1,7 @@
 # Copyright (C) Microsoft Corporation. All rights reserved.
 # This file is distributed under the University of Illinois Open Source License. See LICENSE.TXT for details.
 import argparse
+import collections
 from hctdb import *
 
 # get db singletons
@@ -402,8 +403,8 @@ class db_oload_gen:
 
         last_category = None
 
-        index_dict = {}
-        single_dict = {}
+        index_dict = collections.OrderedDict()
+        single_dict = collections.OrderedDict()
         struct_list = []
 
         for instr in self.instrs:
@@ -796,7 +797,7 @@ def get_is_pass_option_name():
     db = db_dxil()
     prefix = ""
     result = "return "
-    for k in db.pass_idx_args:
+    for k in sorted(db.pass_idx_args):
         result += prefix + "S.equals(\"%s\")" % k
         prefix = "\n  ||  "
     return result + ";"