Skip to content

Commit f008085

Browse files
authored
Merge pull request microsoft#3968 from microsoft/merge-hlsl2021-master
Merge hlsl2021 master
2 parents d5fb049 + a4dfa1c commit f008085

File tree

106 files changed

+4190
-435
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+4190
-435
lines changed

include/dxc/HlslIntrinsicOp.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ import hctdb_instrhelp
123123
IOP_abs,
124124
IOP_acos,
125125
IOP_all,
126+
IOP_and,
126127
IOP_any,
127128
IOP_asdouble,
128129
IOP_asfloat,
@@ -185,6 +186,7 @@ import hctdb_instrhelp
185186
IOP_msad4,
186187
IOP_mul,
187188
IOP_normalize,
189+
IOP_or,
188190
IOP_pack_clamp_s8,
189191
IOP_pack_clamp_u8,
190192
IOP_pack_s8,
@@ -199,6 +201,7 @@ import hctdb_instrhelp
199201
IOP_round,
200202
IOP_rsqrt,
201203
IOP_saturate,
204+
IOP_select,
202205
IOP_sign,
203206
IOP_sin,
204207
IOP_sincos,

include/dxc/Support/HLSLOptions.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,12 @@ class DxcOpts {
199199
unsigned ScanLimit = 0; // OPT_memdep_block_scan_limit
200200
bool ForceZeroStoreLifetimes = false; // OPT_force_zero_store_lifetimes
201201
bool EnableLifetimeMarkers = false; // OPT_enable_lifetime_markers
202+
bool EnableTemplates = false; // OPT_enable_templates
203+
bool EnableOperatorOverloading = false; // OPT_enable_operator_overloading
204+
bool StrictUDTCasting = false; // OPT_strict_udt_casting
205+
206+
// Experimental option to enable short-circuiting operators
207+
bool EnableShortCircuit = false; // OPT_enable_short_circuit
202208

203209
// Optimization pass enables, disables and selects
204210
std::map<std::string, bool> DxcOptimizationToggles; // OPT_opt_enable & OPT_opt_disable

include/dxc/Support/HLSLOptions.td

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,12 @@ def enable_lifetime_markers : Flag<["-", "/"], "enable-lifetime-markers">, Group
288288
HelpText<"Enable generation of lifetime markers">;
289289
def disable_lifetime_markers : Flag<["-", "/"], "disable-lifetime-markers">, Group<hlslcomp_Group>, Flags<[CoreOption, HelpHidden]>,
290290
HelpText<"Disable generation of lifetime markers where they would be otherwise (6.6+)">;
291+
def enable_templates: Flag<["-", "/"], "enable-templates">, Group<hlslcomp_Group>, Flags<[CoreOption]>,
292+
HelpText<"Enable template support for HLSL.">;
293+
def enable_operator_overloading: Flag<["-", "/"], "enable-operator-overloading">, Group<hlslcomp_Group>, Flags<[CoreOption]>,
294+
HelpText<"Enable operator overloading support for HLSL.">;
295+
def strict_udt_casting: Flag<["-", "/"], "strict-udt-casting">, Group<hlslcomp_Group>, Flags<[CoreOption, HelpHidden]>,
296+
HelpText<"Require explicit casts between different structure types with compatible layouts.">;
291297
def enable_payload_qualifiers : Flag<["-", "/"], "enable-payload-qualifiers">, Group<hlslcomp_Group>, Flags<[CoreOption, RewriteOption, DriverOption]>,
292298
HelpText<"Enables support for payload access qualifiers for raytracing payloads in SM 6.6.">;
293299
def disable_payload_qualifiers : Flag<["-", "/"], "disable-payload-qualifiers">, Group<hlslcomp_Group>, Flags<[CoreOption, RewriteOption, DriverOption]>,
@@ -452,6 +458,9 @@ def Qstrip_reflect_from_dxil : Flag<["-", "/"], "Qstrip_reflect_from_dxil">,
452458
Flags<[CoreOption, HelpHidden]>, Group<hlslutil_Group>,
453459
HelpText<"Strip reflection data from shader bytecode (must be used with /Fo <file>)">;
454460

461+
def enable_short_circuit : Flag<["-", "/"], "enable-short-circuit">, Flags<[CoreOption, HelpHidden]>, Group<hlslcomp_Group>,
462+
HelpText<"Operators '&&', '||', and '?:' will short circuit, only accepting scalar inputs. Use and(), or(), and select() intrinsics in place of non-short-circuiting vector operators.">;
463+
455464
/*
456465
def shtemplate : JoinedOrSeparate<["-", "/"], "shtemplate">, MetaVarName<"<file>">, Group<hlslcomp_Group>,
457466
HelpText<"Template shader file for merging/matching resources">;

lib/DxcSupport/HLSLOptions.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,13 +475,30 @@ int ReadDxcOpts(const OptTable *optionTable, unsigned flagsToInclude,
475475
opts.EnableFXCCompatMode = true;
476476
}
477477

478+
// If the HLSL version is 2021, allow the operator overloading by default.
479+
// If the HLSL version is 2016 or 2018, allow the operator overloading only
480+
// when -enable-operator-overloading option is enabled.
481+
// If the HLSL version is 2015, do not allow the operator overloading.
482+
opts.EnableOperatorOverloading =
483+
opts.HLSLVersion >= 2021 ||
484+
Args.hasFlag(OPT_enable_operator_overloading, OPT_INVALID, false);
485+
if (opts.HLSLVersion <= 2015 && opts.EnableOperatorOverloading) {
486+
errors << "/enable-operator-overloading is not supported with HLSL Version "
487+
<< opts.HLSLVersion;
488+
return 1;
489+
}
490+
478491
// AssemblyCodeHex not supported (Fx)
479492
// OutputLibrary not supported (Fl)
480493
opts.AssemblyCode = Args.getLastArgValue(OPT_Fc);
481494
opts.DebugFile = Args.getLastArgValue(OPT_Fd);
482495
opts.ImportBindingTable = Args.getLastArgValue(OPT_import_binding_table);
483496
opts.ExtractPrivateFile = Args.getLastArgValue(OPT_getprivate);
484497
opts.Enable16BitTypes = Args.hasFlag(OPT_enable_16bit_types, OPT_INVALID, false);
498+
opts.EnableTemplates = Args.hasFlag(OPT_enable_templates, OPT_INVALID, false);
499+
opts.EnableOperatorOverloading =
500+
Args.hasFlag(OPT_enable_operator_overloading, OPT_INVALID, false);
501+
opts.StrictUDTCasting = Args.hasFlag(OPT_strict_udt_casting, OPT_INVALID, false);
485502
opts.OutputObject = Args.getLastArgValue(OPT_Fo);
486503
opts.OutputHeader = Args.getLastArgValue(OPT_Fh);
487504
opts.OutputWarningsFile = Args.getLastArgValue(OPT_Fe);
@@ -695,6 +712,10 @@ int ReadDxcOpts(const OptTable *optionTable, unsigned flagsToInclude,
695712
!Args.hasFlag(OPT_disable_lifetime_markers, OPT_INVALID, false);
696713
opts.EnablePayloadQualifiers = Args.hasFlag(OPT_enable_payload_qualifiers, OPT_INVALID,
697714
DXIL::CompareVersions(Major, Minor, 6, 7) >= 0);
715+
716+
// Experimental option to enable short-circuiting operators
717+
opts.EnableShortCircuit = Args.hasFlag(OPT_enable_short_circuit, OPT_INVALID, false);
718+
698719
if (DXIL::CompareVersions(Major, Minor, 6, 8) < 0) {
699720
opts.EnablePayloadQualifiers &= !Args.hasFlag(OPT_disable_payload_qualifiers, OPT_INVALID, false);
700721
}

lib/HLSL/HLOperationLower.cpp

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5338,6 +5338,72 @@ Value *TranslateGetHandleFromHeap(CallInst *CI, IntrinsicOp IOP,
53385338
}
53395339
}
53405340

5341+
// Translate and/or/select intrinsics
5342+
namespace {
5343+
Value *TranslateAnd(CallInst *CI, IntrinsicOp IOP, OP::OpCode opcode,
5344+
HLOperationLowerHelper &helper, HLObjectOperationLowerHelper *pObjHelper, bool &Translated) {
5345+
Value *x = CI->getArgOperand(HLOperandIndex::kBinaryOpSrc0Idx);
5346+
Value *y = CI->getArgOperand(HLOperandIndex::kBinaryOpSrc1Idx);
5347+
Type *Ty = CI->getType();
5348+
Type *EltTy = Ty->getScalarType();
5349+
IRBuilder<> Builder(CI);
5350+
5351+
if (Ty != EltTy) {
5352+
Value *Result = UndefValue::get(Ty);
5353+
for (unsigned i = 0; i < Ty->getVectorNumElements(); i++) {
5354+
Value *EltX = Builder.CreateExtractElement(x, i);
5355+
Value *EltY = Builder.CreateExtractElement(y, i);
5356+
Value *tmp = Builder.CreateAnd(EltX, EltY);
5357+
Result = Builder.CreateInsertElement(Result, tmp, i);
5358+
}
5359+
return Result;
5360+
}
5361+
return Builder.CreateAnd(x, y);
5362+
}
5363+
Value *TranslateOr(CallInst *CI, IntrinsicOp IOP, OP::OpCode opcode,
5364+
HLOperationLowerHelper &helper, HLObjectOperationLowerHelper *pObjHelper, bool &Translated) {
5365+
Value *x = CI->getArgOperand(HLOperandIndex::kBinaryOpSrc0Idx);
5366+
Value *y = CI->getArgOperand(HLOperandIndex::kBinaryOpSrc1Idx);
5367+
Type *Ty = CI->getType();
5368+
Type *EltTy = Ty->getScalarType();
5369+
IRBuilder<> Builder(CI);
5370+
5371+
if (Ty != EltTy) {
5372+
Value *Result = UndefValue::get(Ty);
5373+
for (unsigned i = 0; i < Ty->getVectorNumElements(); i++) {
5374+
Value *EltX = Builder.CreateExtractElement(x, i);
5375+
Value *EltY = Builder.CreateExtractElement(y, i);
5376+
Value *tmp = Builder.CreateOr(EltX, EltY);
5377+
Result = Builder.CreateInsertElement(Result, tmp, i);
5378+
}
5379+
return Result;
5380+
}
5381+
return Builder.CreateOr(x, y);
5382+
}
5383+
Value *TranslateSelect(CallInst *CI, IntrinsicOp IOP, OP::OpCode opcode,
5384+
HLOperationLowerHelper &helper, HLObjectOperationLowerHelper *pObjHelper, bool &Translated) {
5385+
Value *cond = CI->getArgOperand(HLOperandIndex::kTrinaryOpSrc0Idx);
5386+
Value *t = CI->getArgOperand(HLOperandIndex::kTrinaryOpSrc1Idx);
5387+
Value *f = CI->getArgOperand(HLOperandIndex::kTrinaryOpSrc2Idx);
5388+
Type *Ty = CI->getType();
5389+
Type *EltTy = Ty->getScalarType();
5390+
IRBuilder<> Builder(CI);
5391+
5392+
if (Ty != EltTy) {
5393+
Value *Result = UndefValue::get(Ty);
5394+
for (unsigned i = 0; i < Ty->getVectorNumElements(); i++) {
5395+
Value *EltCond = Builder.CreateExtractElement(cond, i);
5396+
Value *EltTrue = Builder.CreateExtractElement(t, i);
5397+
Value *EltFalse = Builder.CreateExtractElement(f, i);
5398+
Value *tmp = Builder.CreateSelect(EltCond, EltTrue, EltFalse);
5399+
Result = Builder.CreateInsertElement(Result, tmp, i);
5400+
}
5401+
return Result;
5402+
}
5403+
return Builder.CreateSelect(cond, t, f);
5404+
}
5405+
}
5406+
53415407
// Lower table.
53425408
namespace {
53435409

@@ -5475,6 +5541,7 @@ IntrinsicLower gLowerTable[] = {
54755541
{IntrinsicOp::IOP_abs, TranslateAbs, DXIL::OpCode::NumOpCodes},
54765542
{IntrinsicOp::IOP_acos, TrivialUnaryOperation, DXIL::OpCode::Acos},
54775543
{IntrinsicOp::IOP_all, TranslateAll, DXIL::OpCode::NumOpCodes},
5544+
{IntrinsicOp::IOP_and, TranslateAnd, DXIL::OpCode::NumOpCodes},
54785545
{IntrinsicOp::IOP_any, TranslateAny, DXIL::OpCode::NumOpCodes},
54795546
{IntrinsicOp::IOP_asdouble, TranslateAsDouble, DXIL::OpCode::MakeDouble},
54805547
{IntrinsicOp::IOP_asfloat, TranslateBitcast, DXIL::OpCode::NumOpCodes},
@@ -5537,6 +5604,7 @@ IntrinsicLower gLowerTable[] = {
55375604
{IntrinsicOp::IOP_msad4, TranslateMSad4, DXIL::OpCode::NumOpCodes},
55385605
{IntrinsicOp::IOP_mul, TranslateMul, DXIL::OpCode::NumOpCodes},
55395606
{IntrinsicOp::IOP_normalize, TranslateNormalize, DXIL::OpCode::NumOpCodes},
5607+
{IntrinsicOp::IOP_or, TranslateOr, DXIL::OpCode::NumOpCodes},
55405608
{IntrinsicOp::IOP_pack_clamp_s8, TranslatePack, DXIL::OpCode::Pack4x8 },
55415609
{IntrinsicOp::IOP_pack_clamp_u8, TranslatePack, DXIL::OpCode::Pack4x8 },
55425610
{IntrinsicOp::IOP_pack_s8, TranslatePack, DXIL::OpCode::Pack4x8 },
@@ -5551,6 +5619,7 @@ IntrinsicLower gLowerTable[] = {
55515619
{IntrinsicOp::IOP_round, TrivialUnaryOperation, DXIL::OpCode::Round_ne},
55525620
{IntrinsicOp::IOP_rsqrt, TrivialUnaryOperation, DXIL::OpCode::Rsqrt},
55535621
{IntrinsicOp::IOP_saturate, TrivialUnaryOperation, DXIL::OpCode::Saturate},
5622+
{IntrinsicOp::IOP_select, TranslateSelect, DXIL::OpCode::NumOpCodes},
55545623
{IntrinsicOp::IOP_sign, TranslateSign, DXIL::OpCode::NumOpCodes},
55555624
{IntrinsicOp::IOP_sin, TrivialUnaryOperation, DXIL::OpCode::Sin},
55565625
{IntrinsicOp::IOP_sincos, EmptyLower, DXIL::OpCode::NumOpCodes},

tools/clang/include/clang/Basic/DiagnosticCommonKinds.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ def warn_method_param_declaration : Warning<"redeclaration of method parameter %
6666
def err_invalid_storage_class_in_func_decl : Error<
6767
"invalid storage class specifier in function declarator">;
6868
def err_expected_namespace_name : Error<"expected namespace name">;
69+
// HLSL Change Starts
70+
def err_hlsl_variadic_templates : Error<"variadic templates are not supported in HLSL">;
71+
// HLSL Change Ends
6972
def ext_variadic_templates : ExtWarn<
7073
"variadic templates are a C++11 extension">, InGroup<CXX11>;
7174
def warn_cxx98_compat_variadic_templates :

tools/clang/include/clang/Basic/DiagnosticDriverKinds.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,4 +192,8 @@ def warn_target_unsupported_nan2008 : Warning<
192192
def warn_target_unsupported_nanlegacy : Warning<
193193
"ignoring '-mnan=legacy' option because the '%0' architecture does not support it">,
194194
InGroup<UnsupportedNan>;
195+
196+
// HLSL Change Starts
197+
def err_hlsl_invalid_drv_for_operator_overloading : Error<"/enable-operator-overloading is not supported with HLSL Version '%0'">;
198+
// HLSL Change Ends
195199
}

tools/clang/include/clang/Basic/DiagnosticGroups.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,4 +797,5 @@ def HLSLPayloadAccessQualifer: DiagGroup<"payload-access-qualifier", [
797797
HLSLPayloadAccessQualiferPerf,
798798
HLSLPayloadAccessQualiferCall
799799
]>;
800+
def HLSLSemanticIdentifierCollision : DiagGroup<"semantic-identifier-collision">;
800801
// HLSL Change Ends

tools/clang/include/clang/Basic/DiagnosticParseKinds.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,6 +1022,9 @@ def warn_hlsl_effect_state_block : Warning <
10221022
def warn_hlsl_effect_technique : Warning <
10231023
"effect technique ignored - effect syntax is deprecated">,
10241024
InGroup< HLSLEffectsSyntax >;
1025+
def warn_hlsl_semantic_identifier_collision : Warning <
1026+
"'%0' interpreted as semantic; previous definition(s) ignored">,
1027+
InGroup< HLSLSemanticIdentifierCollision >;
10251028
def err_hlsl_enum : Error<
10261029
"enum is unsupported in HLSL before 2017">;
10271030

tools/clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7481,6 +7481,8 @@ def err_hlsl_matrix_member_too_many_positions: Error<
74817481
"more than four positions are referenced in '%0'">;
74827482
def err_hlsl_matrix_member_zero_in_one_based: Error<
74837483
"the digit '0' is used in '%0', but the syntax is for one-based rows and columns">;
7484+
def err_hlsl_overloading_new_delete_operator: Error<
7485+
"overloading %0 is not allowed">;
74847486
def err_hlsl_vector_member_bad_format: Error<
74857487
"invalid format for vector swizzle '%0'">;
74867488
def err_hlsl_vector_member_empty: Error<
@@ -7746,6 +7748,10 @@ def err_hlsl_load_from_mesh_out_arrays: Error<
77467748
"output arrays of a mesh shader can not be read from">;
77477749
def err_hlsl_out_indices_array_incorrect_access: Error<
77487750
"a vector in out indices array must be accessed as a whole">;
7751+
def err_hlsl_logical_binop_scalar : Error<
7752+
"operands for short-circuiting logical binary operator must be scalar">;
7753+
def err_hlsl_ternary_scalar : Error<
7754+
"condition for short-circuiting ternary operator must be scalar">;
77497755
// HLSL Change Ends
77507756

77517757
// SPIRV Change Starts

tools/clang/include/clang/Basic/LangOptions.h

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -149,16 +149,20 @@ class LangOptions : public LangOptionsBase {
149149
#endif
150150

151151
// HLSL Change Starts
152-
unsigned HLSLVersion;
152+
unsigned HLSLVersion = 2018;
153153
std::string HLSLEntryFunction;
154154
std::string HLSLProfile;
155-
unsigned RootSigMajor;
156-
unsigned RootSigMinor;
157-
bool IsHLSLLibrary;
158-
bool UseMinPrecision; // use min precision, not native precision.
159-
bool EnableDX9CompatMode;
160-
bool EnableFXCCompatMode;
161-
bool EnablePayloadAccessQualifiers;
155+
unsigned RootSigMajor = 1;
156+
unsigned RootSigMinor = 1;
157+
bool IsHLSLLibrary = false;
158+
bool UseMinPrecision = true; // use min precision, not native precision.
159+
bool EnableDX9CompatMode = false;
160+
bool EnableFXCCompatMode = false;
161+
bool EnableTemplates = false;
162+
bool EnableOperatorOverloading = false;
163+
bool StrictUDTCasting = false;
164+
bool EnablePayloadAccessQualifiers = false;
165+
bool EnableShortCircuit = false;
162166
// HLSL Change Ends
163167

164168
bool SPIRV = false; // SPIRV Change

tools/clang/include/clang/Driver/Options.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,12 @@ def hlsl_version : Separate<["-", "/"], "HV">, Group<f_Group>, Flags<[DriverOpti
680680
HelpText<"HLSL version (2015, 2016, 2017)">; // HLSL Change - mimic the HLSLOptions.td flag
681681
def enable_16bit_types: Flag<["-", "/"], "enable-16bit-types">, Flags<[CoreOption, DriverOption, HelpHidden]>,
682682
HelpText<"Enable 16bit types and disable min precision types.">; // HLSL Change - mimic the HLSLOptions.td flag
683+
def enable_templates: Flag<["-", "/"], "enable-templates">, Flags<[CoreOption, DriverOption, HelpHidden]>,
684+
HelpText<"Enable template support for HLSL.">; // HLSL Change
685+
def enable_operator_overloading: Flag<["-", "/"], "enable-operator-overloading">, Flags<[CoreOption, DriverOption, HelpHidden]>,
686+
HelpText<"Enable operator overloading support for HLSL.">; // HLSL Change
687+
def strict_udt_casting: Flag<["-", "/"], "strict-udt-casting">, Flags<[CoreOption, DriverOption, HelpHidden]>,
688+
HelpText<"Require explicit casts between different structure types with compatible layouts.">;
683689
def fms_compatibility_version
684690
: Joined<["-"], "fms-compatibility-version=">,
685691
Group<f_Group>,

tools/clang/include/clang/SPIRV/AstTypeProbe.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@
1818
namespace clang {
1919
namespace spirv {
2020

21+
/// Returns a string name for the function if |fn| is not an overloaded
22+
/// operator. Otherwise, returns the name of the operator. If
23+
/// |addClassNameWithOperator| is true, adds the name of RecordType that
24+
/// defines the overloaded operator in front of the operator name.
25+
std::string getFunctionOrOperatorName(const FunctionDecl *fn,
26+
bool addClassNameWithOperator);
27+
2128
/// Returns a string name for the given type.
2229
std::string getAstTypeName(QualType type);
2330

@@ -114,6 +121,10 @@ bool isConstantTextureBuffer(QualType);
114121
/// * SubpassInput(MS)
115122
bool isResourceType(QualType);
116123

124+
/// \brief Returns true if the given type is a user-defined struct or class
125+
/// type (not HLSL built-in type).
126+
bool isUserDefinedRecordType(const ASTContext &, QualType);
127+
117128
/// Returns true if the given type is or contains a 16-bit type.
118129
/// The caller must also specify whether 16-bit types have been enabled via
119130
/// command line options.
@@ -240,6 +251,12 @@ bool isRWTexture(QualType);
240251
/// \brief Returns true if the given type is an HLSL sampler type.
241252
bool isSampler(QualType);
242253

254+
/// \brief Returns true if the given type is InputPatch.
255+
bool isInputPatch(QualType type);
256+
257+
/// \brief Returns true if the given type is OutputPatch.
258+
bool isOutputPatch(QualType type);
259+
243260
/// \brief Returns true if the given type is SubpassInput.
244261
bool isSubpassInput(QualType);
245262

tools/clang/include/clang/Sema/Sema.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5507,7 +5507,8 @@ class Sema {
55075507

55085508
void LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS,
55095509
QualType ObjectType, bool EnteringContext,
5510-
bool &MemberOfUnknownSpecialization);
5510+
bool &MemberOfUnknownSpecialization,
5511+
bool NextIsLess = false); // HLSL Change - additional special case flag
55115512

55125513
TemplateNameKind isTemplateName(Scope *S,
55135514
CXXScopeSpec &SS,
@@ -5516,7 +5517,8 @@ class Sema {
55165517
ParsedType ObjectType,
55175518
bool EnteringContext,
55185519
TemplateTy &Template,
5519-
bool &MemberOfUnknownSpecialization);
5520+
bool &MemberOfUnknownSpecialization,
5521+
bool NextIsLess = false); // HLSL Change - additional special case flag
55205522

55215523
bool DiagnoseUnknownTemplateName(const IdentifierInfo &II,
55225524
SourceLocation IILoc,

tools/clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -465,9 +465,6 @@ llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
465465
case BuiltinType::OCLSampler:
466466
case BuiltinType::OCLEvent:
467467
llvm_unreachable("No ObjC or OpenCL support");
468-
case BuiltinType::LitInt:
469-
case BuiltinType::LitFloat:
470-
llvm_unreachable("Unsupported HLSL types");
471468
#endif // HLSL Change - no ObjC or OpenCL support
472469

473470
case BuiltinType::UChar:
@@ -503,6 +500,7 @@ llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
503500
case BuiltinType::Long:
504501
case BuiltinType::WChar_S:
505502
case BuiltinType::LongLong:
503+
case BuiltinType::LitInt:
506504
Encoding = llvm::dwarf::DW_ATE_signed;
507505
break;
508506
case BuiltinType::Bool:
@@ -517,6 +515,7 @@ llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
517515
case BuiltinType::Float:
518516
case BuiltinType::LongDouble:
519517
case BuiltinType::Double:
518+
case BuiltinType::LitFloat:
520519
Encoding = llvm::dwarf::DW_ATE_float;
521520
break;
522521
}

tools/clang/lib/CodeGen/CGExpr.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3075,9 +3075,8 @@ LValue CodeGenFunction::EmitLValueForField(LValue base,
30753075
const CGBitFieldInfo &Info = RL.getBitFieldInfo(field);
30763076
llvm::Value *Addr = base.getAddress();
30773077
unsigned Idx = RL.getLLVMFieldNo(field);
3078-
if (Idx != 0)
3079-
// For structs, we GEP to the field that the record layout suggests.
3080-
Addr = Builder.CreateStructGEP(nullptr, Addr, Idx, field->getName());
3078+
// For structs, we GEP to the field that the record layout suggests.
3079+
Addr = Builder.CreateStructGEP(nullptr, Addr, Idx, field->getName());
30813080
// Get the access type.
30823081
llvm::Type *PtrTy = llvm::Type::getIntNPtrTy(
30833082
getLLVMContext(), Info.StorageSize,

0 commit comments

Comments
 (0)