[llvm] 4c3e25d - [Annotation2Metadata] Support opaque pointers

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 4 07:22:33 PST 2023


Author: Nikita Popov
Date: 2023-01-04T16:21:56+01:00
New Revision: 4c3e25d380b946374cb7d47616dddf4bb854fb5e

URL: https://github.com/llvm/llvm-project/commit/4c3e25d380b946374cb7d47616dddf4bb854fb5e
DIFF: https://github.com/llvm/llvm-project/commit/4c3e25d380b946374cb7d47616dddf4bb854fb5e.diff

LOG: [Annotation2Metadata] Support opaque pointers

Strip pointer casts instead of matching specific constant
expressions.

Added: 
    

Modified: 
    llvm/lib/Transforms/IPO/Annotation2Metadata.cpp
    llvm/test/Transforms/Util/annotation2metadata.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/IPO/Annotation2Metadata.cpp b/llvm/lib/Transforms/IPO/Annotation2Metadata.cpp
index 5ca4e24df8fce..6cc04544cabc5 100644
--- a/llvm/lib/Transforms/IPO/Annotation2Metadata.cpp
+++ b/llvm/lib/Transforms/IPO/Annotation2Metadata.cpp
@@ -47,20 +47,13 @@ static bool convertAnnotation2Metadata(Module &M) {
     auto *OpC = dyn_cast<ConstantStruct>(&Op);
     if (!OpC || OpC->getNumOperands() != 4)
       continue;
-    auto *StrGEP = dyn_cast<ConstantExpr>(OpC->getOperand(1));
-    if (!StrGEP || StrGEP->getNumOperands() < 2)
-      continue;
-    auto *StrC = dyn_cast<GlobalValue>(StrGEP->getOperand(0));
+    auto *StrC = dyn_cast<GlobalValue>(OpC->getOperand(1)->stripPointerCasts());
     if (!StrC)
       continue;
     auto *StrData = dyn_cast<ConstantDataSequential>(StrC->getOperand(0));
     if (!StrData)
       continue;
-    // Look through bitcast.
-    auto *Bitcast = dyn_cast<ConstantExpr>(OpC->getOperand(0));
-    if (!Bitcast || Bitcast->getOpcode() != Instruction::BitCast)
-      continue;
-    auto *Fn = dyn_cast<Function>(Bitcast->getOperand(0));
+    auto *Fn = dyn_cast<Function>(OpC->getOperand(0)->stripPointerCasts());
     if (!Fn)
       continue;
 

diff  --git a/llvm/test/Transforms/Util/annotation2metadata.ll b/llvm/test/Transforms/Util/annotation2metadata.ll
index 35ec3e75559fb..b4c70d2015aca 100644
--- a/llvm/test/Transforms/Util/annotation2metadata.ll
+++ b/llvm/test/Transforms/Util/annotation2metadata.ll
@@ -4,55 +4,55 @@
 @.str = private unnamed_addr constant [10 x i8] c"_remarks1\00", section "llvm.metadata"
 @.str.1 = private unnamed_addr constant [6 x i8] c"ann.c\00", section "llvm.metadata"
 @.str.2 = private unnamed_addr constant [10 x i8] c"_remarks2\00", section "llvm.metadata"
- at llvm.global.annotations = appending global [8 x { i8*, i8*, i8*, i32 }] [
-    { i8*, i8*, i8*, i32 } { i8* bitcast (void (float*)* @test1 to i8*), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i32 2 },
-    { i8*, i8*, i8*, i32 } { i8* bitcast (void (float*)* @test1 to i8*), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i32 2 },
-    { i8*, i8*, i8*, i32 } { i8* bitcast (void (float*)* @test3 to i8*), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), i8* undef, i32 4 }, ; Invalid entry, make sure we do not crash.
-    { i8*, i8*, i8*, i32 } { i8* bitcast (void (float*)* @test3 to i8*), i8* undef, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i32 4 }, ; Invalid entry, make sure we do not crash.
-    { i8*, i8*, i8*, i32 } { i8* undef, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i32 4 }, ; Invalid entry, make sure we do not crash.
-    { i8*, i8*, i8*, i32 } { i8* bitcast (void (float*)* undef to i8*), i8* undef, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i32 4 }, ; Invalid entry, make sure we do not crash.
-    { i8*, i8*, i8*, i32 } { i8* undef, i8* undef, i8* undef, i32 300 },  ; Invalid entry, make sure we do not crash.
-    { i8*, i8*, i8*, i32 } { i8* bitcast (void (float*)* @test3 to i8*), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i32 4 }
+ at llvm.global.annotations = appending global [8 x { ptr, ptr, ptr, i32 }] [
+    { ptr, ptr, ptr, i32 } { ptr @test1, ptr @.str, ptr @.str.1, i32 2 },
+    { ptr, ptr, ptr, i32 } { ptr @test1, ptr @.str.2, ptr @.str.1, i32 2 },
+    { ptr, ptr, ptr, i32 } { ptr @test3, ptr @.str, ptr undef, i32 4 }, ; Invalid entry, make sure we do not crash.
+    { ptr, ptr, ptr, i32 } { ptr @test3, ptr undef, ptr @.str.1, i32 4 }, ; Invalid entry, make sure we do not crash.
+    { ptr, ptr, ptr, i32 } { ptr undef, ptr @.str, ptr @.str.1, i32 4 }, ; Invalid entry, make sure we do not crash.
+    { ptr, ptr, ptr, i32 } { ptr undef, ptr undef, ptr @.str.1, i32 4 }, ; Invalid entry, make sure we do not crash.
+    { ptr, ptr, ptr, i32 } { ptr undef, ptr undef, ptr undef, i32 300 },  ; Invalid entry, make sure we do not crash.
+    { ptr, ptr, ptr, i32 } { ptr @test3, ptr @.str, ptr @.str.1, i32 4 }
     ], section "llvm.metadata"
 
 
 
-define void @test1(float* %a) {
+define void @test1(ptr %a) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A_ADDR:%.*]] = alloca float*, align 8, !annotation [[GROUP1:!.+]]
-; CHECK-NEXT:    store float* [[A:%.*]], float** [[A_ADDR]], align 8, !annotation [[GROUP1]]
+; CHECK-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8, !annotation [[GROUP1:!.+]]
+; CHECK-NEXT:    store ptr [[A:%.*]], ptr [[A_ADDR]], align 8, !annotation [[GROUP1]]
 ; CHECK-NEXT:    ret void, !annotation [[GROUP1]]
 ;
 entry:
-  %a.addr = alloca float*, align 8
-  store float* %a, float** %a.addr, align 8
+  %a.addr = alloca ptr, align 8
+  store ptr %a, ptr %a.addr, align 8
   ret void
 }
 
-define void @test2(float* %a) {
+define void @test2(ptr %a) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A_ADDR:%.*]] = alloca float*, align 8
-; CHECK-NEXT:    store float* [[A:%.*]], float** [[A_ADDR]], align 8
+; CHECK-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8
+; CHECK-NEXT:    store ptr [[A:%.*]], ptr [[A_ADDR]], align 8
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %a.addr = alloca float*, align 8
-  store float* %a, float** %a.addr, align 8
+  %a.addr = alloca ptr, align 8
+  store ptr %a, ptr %a.addr, align 8
   ret void
 }
 
-define void @test3(float* %a) {
+define void @test3(ptr %a) {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A_ADDR:%.*]] = alloca float*, align 8, !annotation [[GROUP2:!.+]]
-; CHECK-NEXT:    store float* [[A:%.*]], float** [[A_ADDR]], align 8, !annotation [[GROUP2]]
+; CHECK-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8, !annotation [[GROUP2:!.+]]
+; CHECK-NEXT:    store ptr [[A:%.*]], ptr [[A_ADDR]], align 8, !annotation [[GROUP2]]
 ; CHECK-NEXT:    ret void, !annotation [[GROUP2]]
 ;
 entry:
-  %a.addr = alloca float*, align 8
-  store float* %a, float** %a.addr, align 8
+  %a.addr = alloca ptr, align 8
+  store ptr %a, ptr %a.addr, align 8
   ret void
 }
 


        


More information about the llvm-commits mailing list