Skip to content

Commit e4a7c87

Browse files
committed
[clang][wip] Implement conditional freeze_bit metadata emission
This work-in-progress commit enhances Clang to conditionally emit freeze_bit metadata for load instructions. The emission is based on the nondeterministic initialization status of the Address class.
1 parent f7c210d commit e4a7c87

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

clang/lib/CodeGen/CGBuilder.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,22 +106,23 @@ class CGBuilderTy : public CGBuilderBaseTy {
106106
// Note that we intentionally hide the CreateLoad APIs that don't
107107
// take an alignment.
108108
llvm::LoadInst *CreateLoad(Address Addr, const llvm::Twine &Name = "") {
109-
return CreateAlignedLoad(Addr.getElementType(),
110-
emitRawPointerFromAddress(Addr),
111-
Addr.getAlignment().getAsAlign(), Name);
109+
return CreateAlignedLoad(
110+
Addr.getElementType(), emitRawPointerFromAddress(Addr),
111+
Addr.getAlignment().getAsAlign(), Name, !Addr.isNondeterministicInit());
112112
}
113113
llvm::LoadInst *CreateLoad(Address Addr, const char *Name) {
114114
// This overload is required to prevent string literals from
115115
// ending up in the IsVolatile overload.
116-
return CreateAlignedLoad(Addr.getElementType(),
117-
emitRawPointerFromAddress(Addr),
118-
Addr.getAlignment().getAsAlign(), Name);
116+
return CreateAlignedLoad(
117+
Addr.getElementType(), emitRawPointerFromAddress(Addr),
118+
Addr.getAlignment().getAsAlign(), Name, !Addr.isNondeterministicInit());
119119
}
120120
llvm::LoadInst *CreateLoad(Address Addr, bool IsVolatile,
121121
const llvm::Twine &Name = "") {
122-
return CreateAlignedLoad(
123-
Addr.getElementType(), emitRawPointerFromAddress(Addr),
124-
Addr.getAlignment().getAsAlign(), IsVolatile, Name);
122+
return CreateAlignedLoad(Addr.getElementType(),
123+
emitRawPointerFromAddress(Addr),
124+
Addr.getAlignment().getAsAlign(), IsVolatile, Name,
125+
!Addr.isNondeterministicInit());
125126
}
126127

127128
using CGBuilderBaseTy::CreateAlignedLoad;

0 commit comments

Comments
 (0)