[llvm] 9c96a6b - Revert "[OpaquePtr][LLParser] Automatically detect opaque pointers in .ll files"

Mitch Phillips via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 21 16:04:47 PDT 2022


Author: Mitch Phillips
Date: 2022-03-21T16:04:36-07:00
New Revision: 9c96a6bbfdde665b5c2389100a15acdeea0f4145

URL: https://github.com/llvm/llvm-project/commit/9c96a6bbfdde665b5c2389100a15acdeea0f4145
DIFF: https://github.com/llvm/llvm-project/commit/9c96a6bbfdde665b5c2389100a15acdeea0f4145.diff

LOG: Revert "[OpaquePtr][LLParser] Automatically detect opaque pointers in .ll files"

This reverts commit 295172ef51c6b9a73bc0fdcfd25f8c41ead9034a.

Reason: Broke the ASan buildbot. More details are available on the
original Phab review at https://reviews.llvm.org/D119482.

Added: 
    llvm/test/Other/force-opaque-ptrs-typed-dis.ll

Modified: 
    llvm/include/llvm/AsmParser/LLLexer.h
    llvm/include/llvm/AsmParser/LLParser.h
    llvm/include/llvm/IR/LLVMContext.h
    llvm/lib/AsmParser/LLLexer.cpp
    llvm/lib/AsmParser/LLParser.cpp
    llvm/lib/IR/LLVMContext.cpp
    llvm/lib/IR/LLVMContextImpl.cpp
    llvm/lib/IR/LLVMContextImpl.h
    llvm/test/Assembler/ptr-outside-opaque-pointers-mode.ll

Removed: 
    llvm/test/Bitcode/opaque-ptr.ll
    llvm/test/Other/mixed-opaque-ptrs-2.ll
    llvm/test/Other/mixed-opaque-ptrs.ll


################################################################################
diff  --git a/llvm/include/llvm/AsmParser/LLLexer.h b/llvm/include/llvm/AsmParser/LLLexer.h
index 7bcb33f187684..c30165e4a97b7 100644
--- a/llvm/include/llvm/AsmParser/LLLexer.h
+++ b/llvm/include/llvm/AsmParser/LLLexer.h
@@ -37,7 +37,7 @@ namespace llvm {
     lltok::Kind CurKind;
     std::string StrVal;
     unsigned UIntVal;
-    Type *TyVal = nullptr;
+    Type *TyVal;
     APFloat APFloatVal;
     APSInt  APSIntVal;
 

diff  --git a/llvm/include/llvm/AsmParser/LLParser.h b/llvm/include/llvm/AsmParser/LLParser.h
index 8fa110c1d8c67..7e72493232c0d 100644
--- a/llvm/include/llvm/AsmParser/LLParser.h
+++ b/llvm/include/llvm/AsmParser/LLParser.h
@@ -95,8 +95,6 @@ namespace llvm {
     typedef LLLexer::LocTy LocTy;
   private:
     LLVMContext &Context;
-    // Lexer to determine whether to use opaque pointers or not.
-    LLLexer OPLex;
     LLLexer Lex;
     // Module being parsed, null if we are only parsing summary index.
     Module *M;
@@ -159,9 +157,8 @@ namespace llvm {
     LLParser(StringRef F, SourceMgr &SM, SMDiagnostic &Err, Module *M,
              ModuleSummaryIndex *Index, LLVMContext &Context,
              SlotMapping *Slots = nullptr)
-        : Context(Context), OPLex(F, SM, Err, Context),
-          Lex(F, SM, Err, Context), M(M), Index(Index), Slots(Slots),
-          BlockAddressPFS(nullptr) {}
+        : Context(Context), Lex(F, SM, Err, Context), M(M), Index(Index),
+          Slots(Slots), BlockAddressPFS(nullptr) {}
     bool Run(
         bool UpgradeDebugInfo, DataLayoutCallbackTy DataLayoutCallback =
                                    [](StringRef) { return None; });

diff  --git a/llvm/include/llvm/IR/LLVMContext.h b/llvm/include/llvm/IR/LLVMContext.h
index d80d54693258a..e804ce90ff9f5 100644
--- a/llvm/include/llvm/IR/LLVMContext.h
+++ b/llvm/include/llvm/IR/LLVMContext.h
@@ -305,9 +305,6 @@ class LLVMContext {
   /// LLVMContext is used by compilation.
   void setOptPassGate(OptPassGate&);
 
-  /// Whether we've decided on using opaque pointers or typed pointers yet.
-  bool hasSetOpaquePointersValue() const;
-
   /// Enable opaque pointers. Can only be called before creating the first
   /// pointer type.
   void enableOpaquePointers() const;

diff  --git a/llvm/lib/AsmParser/LLLexer.cpp b/llvm/lib/AsmParser/LLLexer.cpp
index 8aac5a66c6232..6048066a44fb7 100644
--- a/llvm/lib/AsmParser/LLLexer.cpp
+++ b/llvm/lib/AsmParser/LLLexer.cpp
@@ -860,10 +860,7 @@ lltok::Kind LLLexer::LexIdentifier() {
   TYPEKEYWORD("token",     Type::getTokenTy(Context));
 
   if (Keyword == "ptr") {
-    // enableOpaquePointers() must be called before creating any pointer types.
-    if (!Context.hasSetOpaquePointersValue()) {
-      Context.enableOpaquePointers();
-    } else if (Context.supportsTypedPointers()) {
+    if (Context.supportsTypedPointers()) {
       Warning("ptr type is only supported in -opaque-pointers mode");
       return lltok::Error;
     }

diff  --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 04e651484872a..f4a838bbdec11 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -59,29 +59,9 @@ static std::string getTypeString(Type *T) {
   return Tmp.str();
 }
 
-static void setContextOpaquePointers(LLLexer &L, LLVMContext &C) {
-  while (true) {
-    lltok::Kind K = L.Lex();
-    // LLLexer will set the opaque pointers option in LLVMContext if it sees an
-    // explicit "ptr".
-    if (K == lltok::star || K == lltok::Error || K == lltok::Eof ||
-        isa_and_nonnull<PointerType>(L.getTyVal())) {
-      return;
-    }
-  }
-}
-
 /// Run: module ::= toplevelentity*
 bool LLParser::Run(bool UpgradeDebugInfo,
                    DataLayoutCallbackTy DataLayoutCallback) {
-  // If we haven't decided on whether or not we're using opaque pointers, do a
-  // quick lex over the tokens to see if we explicitly construct any typed or
-  // opaque pointer types.
-  // Don't bail out on an error so we do the same work in the parsing below
-  // regardless of if --opaque-pointers is set.
-  if (!Context.hasSetOpaquePointersValue())
-    setContextOpaquePointers(OPLex, Context);
-
   // Prime the lexer.
   Lex.Lex();
 

diff  --git a/llvm/lib/IR/LLVMContext.cpp b/llvm/lib/IR/LLVMContext.cpp
index f4e917cc89920..4b39599555a65 100644
--- a/llvm/lib/IR/LLVMContext.cpp
+++ b/llvm/lib/IR/LLVMContext.cpp
@@ -351,10 +351,6 @@ std::unique_ptr<DiagnosticHandler> LLVMContext::getDiagnosticHandler() {
   return std::move(pImpl->DiagHandler);
 }
 
-bool LLVMContext::hasSetOpaquePointersValue() const {
-  return pImpl->hasOpaquePointersValue();
-}
-
 void LLVMContext::enableOpaquePointers() const {
   assert(pImpl->PointerTypes.empty() && pImpl->ASPointerTypes.empty() &&
          "Must be called before creating any pointer types");

diff  --git a/llvm/lib/IR/LLVMContextImpl.cpp b/llvm/lib/IR/LLVMContextImpl.cpp
index 401af7a4dfcae..8f9530290459b 100644
--- a/llvm/lib/IR/LLVMContextImpl.cpp
+++ b/llvm/lib/IR/LLVMContextImpl.cpp
@@ -47,11 +47,7 @@ LLVMContextImpl::LLVMContextImpl(LLVMContext &C)
       X86_FP80Ty(C, Type::X86_FP80TyID), FP128Ty(C, Type::FP128TyID),
       PPC_FP128Ty(C, Type::PPC_FP128TyID), X86_MMXTy(C, Type::X86_MMXTyID),
       X86_AMXTy(C, Type::X86_AMXTyID), Int1Ty(C, 1), Int8Ty(C, 8),
-      Int16Ty(C, 16), Int32Ty(C, 32), Int64Ty(C, 64), Int128Ty(C, 128) {
-  if (OpaquePointersCL.getNumOccurrences()) {
-    OpaquePointers = OpaquePointersCL;
-  }
-}
+      Int16Ty(C, 16), Int32Ty(C, 32), Int64Ty(C, 64), Int128Ty(C, 128) {}
 
 LLVMContextImpl::~LLVMContextImpl() {
   // NOTE: We need to delete the contents of OwnedModules, but Module's dtor
@@ -249,13 +245,9 @@ void LLVMContextImpl::setOptPassGate(OptPassGate& OPG) {
   this->OPG = &OPG;
 }
 
-bool LLVMContextImpl::hasOpaquePointersValue() {
-  return OpaquePointers.hasValue();
-}
-
 bool LLVMContextImpl::getOpaquePointers() {
   if (LLVM_UNLIKELY(!(OpaquePointers.hasValue())))
-    OpaquePointers = false;
+    OpaquePointers = OpaquePointersCL;
   return *OpaquePointers;
 }
 

diff  --git a/llvm/lib/IR/LLVMContextImpl.h b/llvm/lib/IR/LLVMContextImpl.h
index b87d2853ad76f..70242f4d8f200 100644
--- a/llvm/lib/IR/LLVMContextImpl.h
+++ b/llvm/lib/IR/LLVMContextImpl.h
@@ -1555,7 +1555,6 @@ class LLVMContextImpl {
   // TODO: clean up the following after we no longer support non-opaque pointer
   // types.
   bool getOpaquePointers();
-  bool hasOpaquePointersValue();
   void setOpaquePointers(bool OP);
 
 private:

diff  --git a/llvm/test/Assembler/ptr-outside-opaque-pointers-mode.ll b/llvm/test/Assembler/ptr-outside-opaque-pointers-mode.ll
index e26e1a75c8c22..bf11dd401ebde 100644
--- a/llvm/test/Assembler/ptr-outside-opaque-pointers-mode.ll
+++ b/llvm/test/Assembler/ptr-outside-opaque-pointers-mode.ll
@@ -1,4 +1,4 @@
-; RUN: not llvm-as < %s -disable-output --opaque-pointers=0 2>&1 | FileCheck %s
+; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
 
 ; CHECK: warning: ptr type is only supported in -opaque-pointers mode
 ; CHECK: error: expected type

diff  --git a/llvm/test/Bitcode/opaque-ptr.ll b/llvm/test/Other/force-opaque-ptrs-typed-dis.ll
similarity index 63%
rename from llvm/test/Bitcode/opaque-ptr.ll
rename to llvm/test/Other/force-opaque-ptrs-typed-dis.ll
index 68b1e821fe60f..e98be24bc7cb3 100644
--- a/llvm/test/Bitcode/opaque-ptr.ll
+++ b/llvm/test/Other/force-opaque-ptrs-typed-dis.ll
@@ -1,4 +1,4 @@
-; RUN: llvm-as --opaque-pointers < %s | not llvm-dis --opaque-pointers=0 2>&1 | FileCheck %s
+; RUN: llvm-as --opaque-pointers < %s | not llvm-dis 2>&1 | FileCheck %s
 
 ; CHECK: error: Opaque pointers are only supported in -opaque-pointers mode
 

diff  --git a/llvm/test/Other/mixed-opaque-ptrs-2.ll b/llvm/test/Other/mixed-opaque-ptrs-2.ll
deleted file mode 100644
index d5fe38da514ad..0000000000000
--- a/llvm/test/Other/mixed-opaque-ptrs-2.ll
+++ /dev/null
@@ -1,6 +0,0 @@
-; RUN: llvm-as -disable-output %s 2>&1
-; FIXME: this should err out saying not to mix `ptr` and `foo*`
-define void @f(ptr) {
-	%a = alloca i32*
-	ret void
-}

diff  --git a/llvm/test/Other/mixed-opaque-ptrs.ll b/llvm/test/Other/mixed-opaque-ptrs.ll
deleted file mode 100644
index 1b67cf48474bc..0000000000000
--- a/llvm/test/Other/mixed-opaque-ptrs.ll
+++ /dev/null
@@ -1,6 +0,0 @@
-; RUN: not llvm-as -disable-output %s 2>&1 | FileCheck %s
-; CHECK: ptr type is only supported in -opaque-pointers mode
-define void @f(i32*) {
-	%a = alloca ptr
-	ret void
-}


        


More information about the llvm-commits mailing list