Skip to content

Commit 0b9f075

Browse files
committed
Fix llvm-c-text to use the same context when cloning instructions.
1 parent a86400d commit 0b9f075

File tree

4 files changed

+41
-22
lines changed

4 files changed

+41
-22
lines changed

llvm/tools/llvm-c-test/attributes.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
int llvm_test_function_attributes(void) {
2121
LLVMEnablePrettyStackTrace();
2222

23-
LLVMModuleRef M = llvm_load_module(false, true);
23+
LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), false, true);
2424

2525
LLVMValueRef F = LLVMGetFirstFunction(M);
2626
while (F) {
@@ -49,7 +49,7 @@ int llvm_test_function_attributes(void) {
4949
int llvm_test_callsite_attributes(void) {
5050
LLVMEnablePrettyStackTrace();
5151

52-
LLVMModuleRef M = llvm_load_module(false, true);
52+
LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), false, true);
5353

5454
LLVMValueRef F = LLVMGetFirstFunction(M);
5555
while (F) {

llvm/tools/llvm-c-test/echo.cpp

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,7 @@ struct FunCloner {
520520
check_value_kind(Src, LLVMInstructionValueKind);
521521
if (!LLVMIsAInstruction(Src))
522522
report_fatal_error("Expected an instruction");
523+
LLVMContextRef Ctx = LLVMGetTypeContext(LLVMTypeOf(Src));
523524

524525
size_t NameLen;
525526
const char *Name = LLVMGetValueName2(Src, &NameLen);
@@ -754,7 +755,11 @@ struct FunCloner {
754755
LLVMSetAlignment(Dst, LLVMGetAlignment(Src));
755756
LLVMSetOrdering(Dst, LLVMGetOrdering(Src));
756757
LLVMSetVolatile(Dst, LLVMGetVolatile(Src));
757-
LLVMSetAtomicSingleThread(Dst, LLVMIsAtomicSingleThread(Src));
758+
LLVMBool IsAtomicSingleThread = LLVMIsAtomicSingleThread(Src);
759+
if (IsAtomicSingleThread)
760+
LLVMSetAtomicSingleThread(Dst, IsAtomicSingleThread);
761+
else
762+
LLVMSetAtomicSyncScopeID(Dst, LLVMGetAtomicSyncScopeID(Src));
758763
break;
759764
}
760765
case LLVMStore: {
@@ -764,7 +769,11 @@ struct FunCloner {
764769
LLVMSetAlignment(Dst, LLVMGetAlignment(Src));
765770
LLVMSetOrdering(Dst, LLVMGetOrdering(Src));
766771
LLVMSetVolatile(Dst, LLVMGetVolatile(Src));
767-
LLVMSetAtomicSingleThread(Dst, LLVMIsAtomicSingleThread(Src));
772+
LLVMBool IsAtomicSingleThread = LLVMIsAtomicSingleThread(Src);
773+
if (IsAtomicSingleThread)
774+
LLVMSetAtomicSingleThread(Dst, IsAtomicSingleThread);
775+
else
776+
LLVMSetAtomicSyncScopeID(Dst, LLVMGetAtomicSyncScopeID(Src));
768777
break;
769778
}
770779
case LLVMGetElementPtr: {
@@ -786,7 +795,11 @@ struct FunCloner {
786795
LLVMAtomicRMWBinOp BinOp = LLVMGetAtomicRMWBinOp(Src);
787796
LLVMAtomicOrdering Ord = LLVMGetOrdering(Src);
788797
LLVMBool SingleThread = LLVMIsAtomicSingleThread(Src);
789-
Dst = LLVMBuildAtomicRMW(Builder, BinOp, Ptr, Val, Ord, SingleThread);
798+
if (SingleThread)
799+
Dst = LLVMBuildAtomicRMW(Builder, BinOp, Ptr, Val, Ord, SingleThread);
800+
else
801+
Dst = LLVMBuildAtomicRMWSyncScope(Builder, BinOp, Ptr, Val, Ord,
802+
LLVMGetAtomicSyncScopeID(Src));
790803
LLVMSetAlignment(Dst, LLVMGetAlignment(Src));
791804
LLVMSetVolatile(Dst, LLVMGetVolatile(Src));
792805
LLVMSetValueName2(Dst, Name, NameLen);
@@ -799,9 +812,13 @@ struct FunCloner {
799812
LLVMAtomicOrdering Succ = LLVMGetCmpXchgSuccessOrdering(Src);
800813
LLVMAtomicOrdering Fail = LLVMGetCmpXchgFailureOrdering(Src);
801814
LLVMBool SingleThread = LLVMIsAtomicSingleThread(Src);
802-
803-
Dst = LLVMBuildAtomicCmpXchg(Builder, Ptr, Cmp, New, Succ, Fail,
804-
SingleThread);
815+
if (SingleThread)
816+
Dst = LLVMBuildAtomicCmpXchg(Builder, Ptr, Cmp, New, Succ, Fail,
817+
SingleThread);
818+
else
819+
Dst = LLVMBuildAtomicCmpXchgSyncScope(Builder, Ptr, Cmp, New, Succ,
820+
Fail,
821+
LLVMGetAtomicSyncScopeID(Src));
805822
LLVMSetAlignment(Dst, LLVMGetAlignment(Src));
806823
LLVMSetVolatile(Dst, LLVMGetVolatile(Src));
807824
LLVMSetWeak(Dst, LLVMGetWeak(Src));
@@ -993,7 +1010,11 @@ struct FunCloner {
9931010
case LLVMFence: {
9941011
LLVMAtomicOrdering Ordering = LLVMGetOrdering(Src);
9951012
LLVMBool IsSingleThreaded = LLVMIsAtomicSingleThread(Src);
996-
Dst = LLVMBuildFence(Builder, Ordering, IsSingleThreaded, Name);
1013+
if (IsSingleThreaded)
1014+
Dst = LLVMBuildFence(Builder, Ordering, IsSingleThreaded, Name);
1015+
else
1016+
Dst = LLVMBuildFenceSyncScope(Builder, Ordering,
1017+
LLVMGetAtomicSyncScopeID(Src), Name);
9971018
break;
9981019
}
9991020
case LLVMZExt: {
@@ -1059,7 +1080,6 @@ struct FunCloner {
10591080
if (LLVMCanValueUseFastMathFlags(Src))
10601081
LLVMSetFastMathFlags(Dst, LLVMGetFastMathFlags(Src));
10611082

1062-
auto Ctx = LLVMGetModuleContext(M);
10631083
size_t NumMetadataEntries;
10641084
auto *AllMetadata =
10651085
LLVMInstructionGetAllMetadataOtherThanDebugLoc(Src,
@@ -1609,12 +1629,12 @@ static void clone_symbols(LLVMModuleRef Src, LLVMModuleRef M) {
16091629
int llvm_echo(void) {
16101630
LLVMEnablePrettyStackTrace();
16111631

1612-
LLVMModuleRef Src = llvm_load_module(false, true);
1632+
LLVMContextRef Ctx = LLVMContextCreate();
1633+
LLVMModuleRef Src = llvm_load_module(Ctx, false, true);
16131634
size_t SourceFileLen;
16141635
const char *SourceFileName = LLVMGetSourceFileName(Src, &SourceFileLen);
16151636
size_t ModuleIdentLen;
16161637
const char *ModuleName = LLVMGetModuleIdentifier(Src, &ModuleIdentLen);
1617-
LLVMContextRef Ctx = LLVMContextCreate();
16181638
LLVMModuleRef M = LLVMModuleCreateWithNameInContext(ModuleName, Ctx);
16191639

16201640
LLVMSetSourceFileName(M, SourceFileName, SourceFileLen);

llvm/tools/llvm-c-test/llvm-c-test.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ extern "C" {
2424
void llvm_tokenize_stdin(void (*cb)(char **tokens, int ntokens));
2525

2626
// module.c
27-
LLVMModuleRef llvm_load_module(bool Lazy, bool New);
27+
LLVMModuleRef llvm_load_module(LLVMContextRef C, bool Lazy, bool New);
2828
int llvm_module_dump(bool Lazy, bool New);
2929
int llvm_module_list_functions(void);
3030
int llvm_module_list_globals(void);

llvm/tools/llvm-c-test/module.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ static void diagnosticHandler(LLVMDiagnosticInfoRef DI, void *C) {
2424
exit(1);
2525
}
2626

27-
LLVMModuleRef llvm_load_module(bool Lazy, bool New) {
27+
LLVMModuleRef llvm_load_module(LLVMContextRef C, bool Lazy, bool New) {
2828
LLVMMemoryBufferRef MB;
2929
LLVMModuleRef M;
3030
char *msg = NULL;
@@ -36,17 +36,16 @@ LLVMModuleRef llvm_load_module(bool Lazy, bool New) {
3636

3737
LLVMBool Ret;
3838
if (New) {
39-
LLVMContextRef C = LLVMGetGlobalContext();
4039
LLVMContextSetDiagnosticHandler(C, diagnosticHandler, NULL);
4140
if (Lazy)
42-
Ret = LLVMGetBitcodeModule2(MB, &M);
41+
Ret = LLVMGetBitcodeModuleInContext2(C, MB, &M);
4342
else
44-
Ret = LLVMParseBitcode2(MB, &M);
43+
Ret = LLVMParseBitcodeInContext2(C, MB, &M);
4544
} else {
4645
if (Lazy)
47-
Ret = LLVMGetBitcodeModule(MB, &M, &msg);
46+
Ret = LLVMGetBitcodeModuleInContext(C, MB, &M, &msg);
4847
else
49-
Ret = LLVMParseBitcode(MB, &M, &msg);
48+
Ret = LLVMParseBitcodeInContext(C, MB, &M, &msg);
5049
}
5150

5251
if (Ret) {
@@ -62,7 +61,7 @@ LLVMModuleRef llvm_load_module(bool Lazy, bool New) {
6261
}
6362

6463
int llvm_module_dump(bool Lazy, bool New) {
65-
LLVMModuleRef M = llvm_load_module(Lazy, New);
64+
LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), Lazy, New);
6665

6766
char *irstr = LLVMPrintModuleToString(M);
6867
puts(irstr);
@@ -74,7 +73,7 @@ int llvm_module_dump(bool Lazy, bool New) {
7473
}
7574

7675
int llvm_module_list_functions(void) {
77-
LLVMModuleRef M = llvm_load_module(false, false);
76+
LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), false, false);
7877
LLVMValueRef f;
7978

8079
f = LLVMGetFirstFunction(M);
@@ -115,7 +114,7 @@ int llvm_module_list_functions(void) {
115114
}
116115

117116
int llvm_module_list_globals(void) {
118-
LLVMModuleRef M = llvm_load_module(false, false);
117+
LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), false, false);
119118
LLVMValueRef g;
120119

121120
g = LLVMGetFirstGlobal(M);

0 commit comments

Comments
 (0)