[PATCH] D123034: [OpaquePtrs][Clang] Add -opaque-pointers/-no-opaque-pointers cc1 options
Nikita Popov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 5 01:15:57 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd69e9f9d8978: [OpaquePtrs][Clang] Add -opaque-pointers/-no-opaque-pointers cc1 options (authored by nikic).
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D123034/new/
https://reviews.llvm.org/D123034
Files:
clang/include/clang/Basic/CodeGenOptions.def
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/CodeGenAction.cpp
clang/test/CodeGen/opaque-pointers-flag.c
Index: clang/test/CodeGen/opaque-pointers-flag.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/opaque-pointers-flag.c
@@ -0,0 +1,27 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
+// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s -check-prefix=TYPED
+// RUN: %clang_cc1 -opaque-pointers -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s -check-prefix=OPAQUE
+// The current default is typed pointers:
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s -check-prefix=TYPED
+
+// TYPED-LABEL: @test(
+// TYPED-NEXT: entry:
+// TYPED-NEXT: [[P_ADDR:%.*]] = alloca i32*, align 8
+// TYPED-NEXT: store i32* [[P:%.*]], i32** [[P_ADDR]], align 8
+// TYPED-NEXT: [[TMP0:%.*]] = load i32*, i32** [[P_ADDR]], align 8
+// TYPED-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[TMP0]], i64 1
+// TYPED-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+// TYPED-NEXT: ret i32 [[TMP1]]
+//
+// OPAQUE-LABEL: @test(
+// OPAQUE-NEXT: entry:
+// OPAQUE-NEXT: [[P_ADDR:%.*]] = alloca ptr, align 8
+// OPAQUE-NEXT: store ptr [[P:%.*]], ptr [[P_ADDR]], align 8
+// OPAQUE-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P_ADDR]], align 8
+// OPAQUE-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 1
+// OPAQUE-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
+// OPAQUE-NEXT: ret i32 [[TMP1]]
+//
+int test(int *p) {
+ return p[1];
+}
Index: clang/lib/CodeGen/CodeGenAction.cpp
===================================================================
--- clang/lib/CodeGen/CodeGenAction.cpp
+++ clang/lib/CodeGen/CodeGenAction.cpp
@@ -983,6 +983,9 @@
if (BA != Backend_EmitNothing && !OS)
return nullptr;
+ if (CI.getCodeGenOpts().OpaquePointers)
+ VMContext->enableOpaquePointers();
+
// Load bitcode modules to link with, if we need to.
if (LinkModules.empty())
for (const CodeGenOptions::BitcodeFileToLink &F :
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -5504,6 +5504,13 @@
PosFlag<SetTrue, [], "Enable">,
NegFlag<SetFalse, [], "Disable">,
BothFlags<[], " analyzing function argument and return types for mandatory definedness">>;
+defm opaque_pointers : BoolOption<"",
+ "opaque-pointers",
+ CodeGenOpts<"OpaquePointers">,
+ DefaultFalse,
+ PosFlag<SetTrue, [], "Enable">,
+ NegFlag<SetFalse, [], "Disable">,
+ BothFlags<[], " opaque pointers">>;
def discard_value_names : Flag<["-"], "discard-value-names">,
HelpText<"Discard value names in LLVM IR">,
MarshallingInfoFlag<CodeGenOpts<"DiscardValueNames">>;
Index: clang/include/clang/Basic/CodeGenOptions.def
===================================================================
--- clang/include/clang/Basic/CodeGenOptions.def
+++ clang/include/clang/Basic/CodeGenOptions.def
@@ -469,6 +469,9 @@
ENUM_CODEGENOPT(ZeroCallUsedRegs, llvm::ZeroCallUsedRegs::ZeroCallUsedRegsKind,
5, llvm::ZeroCallUsedRegs::ZeroCallUsedRegsKind::Skip)
+/// Whether to use opaque pointers.
+CODEGENOPT(OpaquePointers, 1, 0)
+
#undef CODEGENOPT
#undef ENUM_CODEGENOPT
#undef VALUE_CODEGENOPT
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D123034.420405.patch
Type: text/x-patch
Size: 3401 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220405/6315b943/attachment.bin>
More information about the cfe-commits
mailing list