Skip to content

Commit 773e74b

Browse files
authored
merge main into amd-staging (llvm#2493)
2 parents f48edb5 + 33d8edb commit 773e74b

File tree

246 files changed

+8296
-6485
lines changed

Some content is hidden

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

246 files changed

+8296
-6485
lines changed

clang/include/clang/Basic/AddressSpaces.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ enum class LangAS : unsigned {
6161
hlsl_constant,
6262
hlsl_private,
6363
hlsl_device,
64+
hlsl_input,
6465

6566
// Wasm specific address spaces.
6667
wasm_funcref,

clang/include/clang/Basic/Attr.td

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ def SharedVar : SubsetSubject<Var,
140140
[{S->hasGlobalStorage() && !S->getTLSKind()}],
141141
"global variables">;
142142

143+
def HLSLInputBuiltin
144+
: SubsetSubject<Var, [{S->hasGlobalStorage() &&
145+
S->getStorageClass() == StorageClass::SC_Static &&
146+
S->getType().isConstQualified()}],
147+
"static const globals">;
148+
143149
def GlobalVar : SubsetSubject<Var,
144150
[{S->hasGlobalStorage()}], "global variables">;
145151

@@ -4951,6 +4957,14 @@ def HLSLWaveSize: InheritableAttr {
49514957
let Documentation = [WaveSizeDocs];
49524958
}
49534959

4960+
def HLSLVkExtBuiltinInput : InheritableAttr {
4961+
let Spellings = [CXX11<"vk", "ext_builtin_input">];
4962+
let Args = [UnsignedArgument<"BuiltIn">];
4963+
let Subjects = SubjectList<[HLSLInputBuiltin], ErrorDiag>;
4964+
let LangOpts = [HLSL];
4965+
let Documentation = [HLSLVkExtBuiltinInputDocs];
4966+
}
4967+
49544968
def RandomizeLayout : InheritableAttr {
49554969
let Spellings = [GCC<"randomize_layout">];
49564970
let Subjects = SubjectList<[Record]>;

clang/include/clang/Basic/AttrDocs.td

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8508,6 +8508,29 @@ and copied back to the argument after the callee returns.
85088508
}];
85098509
}
85108510

8511+
def HLSLVkExtBuiltinInputDocs : Documentation {
8512+
let Category = DocCatVariable;
8513+
let Content = [{
8514+
Vulkan shaders have `Input` builtins. Those variables are externally
8515+
initialized by the driver/pipeline, but each copy is private to the current
8516+
lane.
8517+
8518+
Those builtins can be declared using the `[[vk::ext_builtin_input]]` attribute
8519+
like follows:
8520+
8521+
.. code-block:: c++
8522+
8523+
[[vk::ext_builtin_input(/* WorkgroupId */ 26)]]
8524+
static const uint3 groupid;
8525+
8526+
This variable will be lowered into a module-level variable, with the `Input`
8527+
storage class, and the `BuiltIn 26` decoration.
8528+
8529+
The full documentation for this inline SPIR-V attribute can be found here:
8530+
https://github.com/microsoft/hlsl-specs/blob/main/proposals/0011-inline-spirv.md
8531+
}];
8532+
}
8533+
85118534
def AnnotateTypeDocs : Documentation {
85128535
let Category = DocCatType;
85138536
let Heading = "annotate_type";

clang/include/clang/Basic/AttributeCommonInfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class AttributeCommonInfo {
6969
IgnoredAttribute,
7070
UnknownAttribute,
7171
};
72-
enum class Scope { NONE, CLANG, GNU, MSVC, OMP, HLSL, GSL, RISCV };
72+
enum class Scope { NONE, CLANG, GNU, MSVC, OMP, HLSL, VK, GSL, RISCV };
7373
enum class AttrArgsInfo {
7474
None,
7575
Optional,

clang/include/clang/Basic/BuiltinHeaders.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//===----------------------------------------------------------------------===//
1313

1414
HEADER(NO_HEADER, nullptr)
15+
HEADER(ARMACLE_H, "arm_acle.h")
1516
HEADER(BLOCKS_H, "Blocks.h")
1617
HEADER(COMPLEX_H, "complex.h")
1718
HEADER(CTYPE_H, "ctype.h")

clang/include/clang/Basic/BuiltinsAArch64.def

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ BUILTIN(__builtin_arm_wfi, "v", "")
5050
BUILTIN(__builtin_arm_sev, "v", "")
5151
BUILTIN(__builtin_arm_sevl, "v", "")
5252
BUILTIN(__builtin_arm_chkfeat, "WUiWUi", "")
53+
TARGET_HEADER_BUILTIN(__yield, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
54+
TARGET_HEADER_BUILTIN(__wfe, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
55+
TARGET_HEADER_BUILTIN(__wfi, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
56+
TARGET_HEADER_BUILTIN(__sev, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
57+
TARGET_HEADER_BUILTIN(__sevl, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
5358

5459
// Like __builtin_trap but provide an 16-bit immediate reason code (which goes into `brk #N`).
5560
BUILTIN(__builtin_arm_trap, "vUIs", "nr")
@@ -82,6 +87,9 @@ TARGET_BUILTIN(__builtin_arm_mops_memset_tag, "v*v*iz", "", "mte,mops")
8287
BUILTIN(__builtin_arm_dmb, "vUi", "nc")
8388
BUILTIN(__builtin_arm_dsb, "vUi", "nc")
8489
BUILTIN(__builtin_arm_isb, "vUi", "nc")
90+
TARGET_HEADER_BUILTIN(__dmb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
91+
TARGET_HEADER_BUILTIN(__dsb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
92+
TARGET_HEADER_BUILTIN(__isb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
8593

8694
TARGET_BUILTIN(__builtin_arm_jcvt, "Zid", "nc", "v8.3a")
8795

@@ -98,16 +106,6 @@ BUILTIN(__builtin_arm_wsr64, "vcC*WUi", "nc")
98106
TARGET_BUILTIN(__builtin_arm_wsr128, "vcC*LLLUi", "nc", "d128")
99107
BUILTIN(__builtin_arm_wsrp, "vcC*vC*", "nc")
100108

101-
// MSVC
102-
LANGBUILTIN(__dmb, "vUi", "nc", ALL_MS_LANGUAGES)
103-
LANGBUILTIN(__dsb, "vUi", "nc", ALL_MS_LANGUAGES)
104-
LANGBUILTIN(__isb, "vUi", "nc", ALL_MS_LANGUAGES)
105-
LANGBUILTIN(__yield, "v", "", ALL_MS_LANGUAGES)
106-
LANGBUILTIN(__wfe, "v", "", ALL_MS_LANGUAGES)
107-
LANGBUILTIN(__wfi, "v", "", ALL_MS_LANGUAGES)
108-
LANGBUILTIN(__sev, "v", "", ALL_MS_LANGUAGES)
109-
LANGBUILTIN(__sevl, "v", "", ALL_MS_LANGUAGES)
110-
111109
// Misc
112110
BUILTIN(__builtin_sponentry, "v*", "c")
113111

clang/include/clang/Basic/BuiltinsARM.def

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,19 @@ BUILTIN(__builtin_arm_wfi, "v", "")
186186
BUILTIN(__builtin_arm_sev, "v", "")
187187
BUILTIN(__builtin_arm_sevl, "v", "")
188188
BUILTIN(__builtin_arm_dbg, "vUi", "")
189+
TARGET_HEADER_BUILTIN(__yield, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
190+
TARGET_HEADER_BUILTIN(__wfe, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
191+
TARGET_HEADER_BUILTIN(__wfi, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
192+
TARGET_HEADER_BUILTIN(__sev, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
193+
TARGET_HEADER_BUILTIN(__sevl, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
189194

190195
// Data barrier
191196
BUILTIN(__builtin_arm_dmb, "vUi", "nc")
192197
BUILTIN(__builtin_arm_dsb, "vUi", "nc")
193198
BUILTIN(__builtin_arm_isb, "vUi", "nc")
199+
TARGET_HEADER_BUILTIN(__dmb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
200+
TARGET_HEADER_BUILTIN(__dsb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
201+
TARGET_HEADER_BUILTIN(__isb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
194202

195203
// Prefetch
196204
BUILTIN(__builtin_arm_prefetch, "vvC*UiUi", "nc")
@@ -209,15 +217,6 @@ BUILTIN(__builtin_sponentry, "v*", "c")
209217
// MSVC
210218
LANGBUILTIN(__emit, "vIUiC", "", ALL_MS_LANGUAGES)
211219

212-
LANGBUILTIN(__yield, "v", "", ALL_MS_LANGUAGES)
213-
LANGBUILTIN(__wfe, "v", "", ALL_MS_LANGUAGES)
214-
LANGBUILTIN(__wfi, "v", "", ALL_MS_LANGUAGES)
215-
LANGBUILTIN(__sev, "v", "", ALL_MS_LANGUAGES)
216-
LANGBUILTIN(__sevl, "v", "", ALL_MS_LANGUAGES)
217-
218-
LANGBUILTIN(__dmb, "vUi", "nc", ALL_MS_LANGUAGES)
219-
LANGBUILTIN(__dsb, "vUi", "nc", ALL_MS_LANGUAGES)
220-
LANGBUILTIN(__isb, "vUi", "nc", ALL_MS_LANGUAGES)
221220
LANGBUILTIN(__ldrexd, "WiWiCD*", "", ALL_MS_LANGUAGES)
222221
LANGBUILTIN(_MoveFromCoprocessor, "UiIUiIUiIUiIUiIUi", "", ALL_MS_LANGUAGES)
223222
LANGBUILTIN(_MoveFromCoprocessor2, "UiIUiIUiIUiIUiIUi", "", ALL_MS_LANGUAGES)

clang/include/clang/Sema/SemaHLSL.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ class SemaHLSL : public SemaBase {
131131
void handleParamModifierAttr(Decl *D, const ParsedAttr &AL);
132132
bool handleResourceTypeAttr(QualType T, const ParsedAttr &AL);
133133

134+
void handleVkExtBuiltinInputAttr(Decl *D, const ParsedAttr &AL);
135+
134136
bool CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
135137
QualType ProcessResourceTypeAttributes(QualType Wrapped);
136138
HLSLAttributedResourceLocInfo

clang/lib/AST/Type.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ bool Qualifiers::isTargetAddressSpaceSupersetOf(LangAS A, LangAS B,
100100
// address spaces to default to work around this problem.
101101
(A == LangAS::Default && B == LangAS::hlsl_private) ||
102102
(A == LangAS::Default && B == LangAS::hlsl_device) ||
103+
(A == LangAS::Default && B == LangAS::hlsl_input) ||
103104
// Conversions from target specific address spaces may be legal
104105
// depending on the target information.
105106
Ctx.getTargetInfo().isAddressSpaceSupersetOf(A, B);

clang/lib/AST/TypePrinter.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2667,6 +2667,8 @@ std::string Qualifiers::getAddrSpaceAsString(LangAS AS) {
26672667
return "hlsl_private";
26682668
case LangAS::hlsl_device:
26692669
return "hlsl_device";
2670+
case LangAS::hlsl_input:
2671+
return "hlsl_input";
26702672
case LangAS::wasm_funcref:
26712673
return "__funcref";
26722674
default:

clang/lib/Basic/Attributes.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ getScopeFromNormalizedScopeName(StringRef ScopeName) {
210210
.Case("gnu", AttributeCommonInfo::Scope::GNU)
211211
.Case("gsl", AttributeCommonInfo::Scope::GSL)
212212
.Case("hlsl", AttributeCommonInfo::Scope::HLSL)
213+
.Case("vk", AttributeCommonInfo::Scope::VK)
213214
.Case("msvc", AttributeCommonInfo::Scope::MSVC)
214215
.Case("omp", AttributeCommonInfo::Scope::OMP)
215216
.Case("riscv", AttributeCommonInfo::Scope::RISCV);

clang/lib/Basic/TargetInfo.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ static const LangASMap FakeAddrSpaceMap = {
4949
13, // hlsl_groupshared
5050
14, // hlsl_constant
5151
15, // hlsl_private
52+
16, // hlsl_device
53+
17, // hlsl_input
5254
20, // wasm_funcref
5355
};
5456

clang/lib/Basic/Targets/AArch64.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ static const unsigned ARM64AddrSpaceMap[] = {
4747
0, // hlsl_constant
4848
0, // hlsl_private
4949
0, // hlsl_device
50+
0, // hlsl_input
5051
// Wasm address space values for this target are dummy values,
5152
// as it is only enabled for Wasm targets.
5253
20, // wasm_funcref

clang/lib/Basic/Targets/AMDGPU.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsGenMap = {
6262
// will break loudly.
6363
llvm::AMDGPUAS::PRIVATE_ADDRESS, // hlsl_private
6464
llvm::AMDGPUAS::GLOBAL_ADDRESS, // hlsl_device
65+
llvm::AMDGPUAS::PRIVATE_ADDRESS, // hlsl_input
6566
};
6667

6768
const LangASMap AMDGPUTargetInfo::AMDGPUDefIsPrivMap = {
@@ -89,6 +90,7 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsPrivMap = {
8990
llvm::AMDGPUAS::CONSTANT_ADDRESS, // hlsl_constant
9091
llvm::AMDGPUAS::PRIVATE_ADDRESS, // hlsl_private
9192
llvm::AMDGPUAS::GLOBAL_ADDRESS, // hlsl_device
93+
llvm::AMDGPUAS::PRIVATE_ADDRESS, // hlsl_input
9294
};
9395
} // namespace targets
9496
} // namespace clang

clang/lib/Basic/Targets/DirectX.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ static const unsigned DirectXAddrSpaceMap[] = {
4545
2, // hlsl_constant
4646
0, // hlsl_private
4747
0, // hlsl_device
48+
0, // hlsl_input
4849
// Wasm address space values for this target are dummy values,
4950
// as it is only enabled for Wasm targets.
5051
20, // wasm_funcref

clang/lib/Basic/Targets/NVPTX.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ static const unsigned NVPTXAddrSpaceMap[] = {
4949
0, // hlsl_constant
5050
0, // hlsl_private
5151
0, // hlsl_device
52+
0, // hlsl_input
5253
// Wasm address space values for this target are dummy values,
5354
// as it is only enabled for Wasm targets.
5455
20, // wasm_funcref

clang/lib/Basic/Targets/SPIR.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ static const unsigned SPIRDefIsPrivMap[] = {
5050
12, // hlsl_constant
5151
10, // hlsl_private
5252
11, // hlsl_device
53+
7, // hlsl_input
5354
// Wasm address space values for this target are dummy values,
5455
// as it is only enabled for Wasm targets.
5556
20, // wasm_funcref
@@ -85,6 +86,7 @@ static const unsigned SPIRDefIsGenMap[] = {
8586
0, // hlsl_constant
8687
10, // hlsl_private
8788
11, // hlsl_device
89+
7, // hlsl_input
8890
// Wasm address space values for this target are dummy values,
8991
// as it is only enabled for Wasm targets.
9092
20, // wasm_funcref

clang/lib/Basic/Targets/SystemZ.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ static const unsigned ZOSAddressMap[] = {
4545
0, // hlsl_constant
4646
0, // hlsl_private
4747
0, // hlsl_device
48+
0, // hlsl_input
4849
0 // wasm_funcref
4950
};
5051

clang/lib/Basic/Targets/TCE.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ static const unsigned TCEOpenCLAddrSpaceMap[] = {
5454
0, // hlsl_constant
5555
0, // hlsl_private
5656
0, // hlsl_device
57+
0, // hlsl_input
5758
// Wasm address space values for this target are dummy values,
5859
// as it is only enabled for Wasm targets.
5960
20, // wasm_funcref

clang/lib/Basic/Targets/WebAssembly.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ static const unsigned WebAssemblyAddrSpaceMap[] = {
4545
0, // hlsl_constant
4646
0, // hlsl_private
4747
0, // hlsl_device
48+
0, // hlsl_input
4849
20, // wasm_funcref
4950
};
5051

clang/lib/Basic/Targets/X86.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ static const unsigned X86AddrSpaceMap[] = {
4949
0, // hlsl_constant
5050
0, // hlsl_private
5151
0, // hlsl_device
52+
0, // hlsl_input
5253
// Wasm address space values for this target are dummy values,
5354
// as it is only enabled for Wasm targets.
5455
20, // wasm_funcref

clang/lib/CodeGen/CGCall.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3941,9 +3941,9 @@ llvm::Value *CodeGenFunction::EmitCMSEClearRecord(llvm::Value *Src,
39413941
return R;
39423942
}
39433943

3944-
void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
3945-
bool EmitRetDbgLoc,
3946-
SourceLocation EndLoc) {
3944+
void CodeGenFunction::EmitFunctionEpilog(
3945+
const CGFunctionInfo &FI, bool EmitRetDbgLoc, SourceLocation EndLoc,
3946+
uint64_t RetKeyInstructionsSourceAtom) {
39473947
if (FI.isNoReturn()) {
39483948
// Noreturn functions don't return.
39493949
EmitUnreachable(EndLoc);
@@ -3958,7 +3958,11 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
39583958

39593959
// Functions with no result always return void.
39603960
if (!ReturnValue.isValid()) {
3961-
Builder.CreateRetVoid();
3961+
auto *I = Builder.CreateRetVoid();
3962+
if (RetKeyInstructionsSourceAtom)
3963+
addInstToSpecificSourceAtom(I, nullptr, RetKeyInstructionsSourceAtom);
3964+
else
3965+
addInstToNewSourceAtom(I, nullptr);
39623966
return;
39633967
}
39643968

@@ -4138,6 +4142,12 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
41384142

41394143
if (RetDbgLoc)
41404144
Ret->setDebugLoc(std::move(RetDbgLoc));
4145+
4146+
llvm::Value *Backup = RV ? Ret->getOperand(0) : nullptr;
4147+
if (RetKeyInstructionsSourceAtom)
4148+
addInstToSpecificSourceAtom(Ret, Backup, RetKeyInstructionsSourceAtom);
4149+
else
4150+
addInstToNewSourceAtom(Ret, Backup);
41414151
}
41424152

41434153
void CodeGenFunction::EmitReturnValueCheck(llvm::Value *RV) {

clang/lib/CodeGen/CGHLSLRuntime.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,20 @@ void CGHLSLRuntime::initializeBufferFromBinding(const HLSLBufferDecl *BufDecl,
624624
}
625625
}
626626

627+
void CGHLSLRuntime::handleGlobalVarDefinition(const VarDecl *VD,
628+
llvm::GlobalVariable *GV) {
629+
if (auto Attr = VD->getAttr<HLSLVkExtBuiltinInputAttr>()) {
630+
LLVMContext &Ctx = GV->getContext();
631+
IRBuilder<> B(GV->getContext());
632+
MDNode *Operands = MDNode::get(
633+
Ctx, {ConstantAsMetadata::get(
634+
B.getInt32(/* Spirv::Decoration::BuiltIn */ 11)),
635+
ConstantAsMetadata::get(B.getInt32(Attr->getBuiltIn()))});
636+
MDNode *Decoration = MDNode::get(Ctx, {Operands});
637+
GV->addMetadata("spirv.Decorations", *Decoration);
638+
}
639+
}
640+
627641
llvm::Instruction *CGHLSLRuntime::getConvergenceToken(BasicBlock &BB) {
628642
if (!CGM.shouldEmitConvergenceTokens())
629643
return nullptr;

clang/lib/CodeGen/CGHLSLRuntime.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ class CGHLSLRuntime {
157157

158158
void emitEntryFunction(const FunctionDecl *FD, llvm::Function *Fn);
159159
void setHLSLFunctionAttributes(const FunctionDecl *FD, llvm::Function *Fn);
160+
void handleGlobalVarDefinition(const VarDecl *VD, llvm::GlobalVariable *Var);
160161

161162
llvm::Instruction *getConvergenceToken(llvm::BasicBlock &BB);
162163

clang/lib/CodeGen/CGStmt.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2869,6 +2869,7 @@ static bool isSwiftAsyncCallee(const CallExpr *CE) {
28692869
/// if the function returns void, or may be missing one if the function returns
28702870
/// non-void. Fun stuff :).
28712871
void CodeGenFunction::EmitReturnStmt(const ReturnStmt &S) {
2872+
ApplyAtomGroup Grp(getDebugInfo());
28722873
if (requiresReturnValueCheck()) {
28732874
llvm::Constant *SLoc = EmitCheckSourceLocation(S.getBeginLoc());
28742875
auto *SLocPtr =
@@ -2944,16 +2945,19 @@ void CodeGenFunction::EmitReturnStmt(const ReturnStmt &S) {
29442945
// If this function returns a reference, take the address of the expression
29452946
// rather than the value.
29462947
RValue Result = EmitReferenceBindingToExpr(RV);
2947-
Builder.CreateStore(Result.getScalarVal(), ReturnValue);
2948+
auto *I = Builder.CreateStore(Result.getScalarVal(), ReturnValue);
2949+
addInstToCurrentSourceAtom(I, I->getValueOperand());
29482950
} else {
29492951
switch (getEvaluationKind(RV->getType())) {
29502952
case TEK_Scalar: {
29512953
llvm::Value *Ret = EmitScalarExpr(RV);
2952-
if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::Indirect)
2954+
if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::Indirect) {
29532955
EmitStoreOfScalar(Ret, MakeAddrLValue(ReturnValue, RV->getType()),
29542956
/*isInit*/ true);
2955-
else
2956-
Builder.CreateStore(Ret, ReturnValue);
2957+
} else {
2958+
auto *I = Builder.CreateStore(Ret, ReturnValue);
2959+
addInstToCurrentSourceAtom(I, I->getValueOperand());
2960+
}
29572961
break;
29582962
}
29592963
case TEK_Complex:

0 commit comments

Comments
 (0)