mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-09 11:25:55 +00:00
Drop @llvm.annotation and @llvm.ptr.annotation intrinsics during codegen.
The intrinsic calls are dropped, but the annotated value is propagated. Fixes PR 15253 Original patch by Zeng Bin! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182387 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -453,6 +453,12 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
|
|||||||
CI->replaceAllUsesWith(ConstantInt::get(CI->getType(), 1));
|
CI->replaceAllUsesWith(ConstantInt::get(CI->getType(), 1));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Intrinsic::annotation:
|
||||||
|
case Intrinsic::ptr_annotation:
|
||||||
|
// Just drop the annotation, but forward the value
|
||||||
|
CI->replaceAllUsesWith(CI->getOperand(0));
|
||||||
|
break;
|
||||||
|
|
||||||
case Intrinsic::var_annotation:
|
case Intrinsic::var_annotation:
|
||||||
break; // Strip out annotate intrinsic
|
break; // Strip out annotate intrinsic
|
||||||
|
|
||||||
|
@@ -5037,6 +5037,11 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
|
|||||||
setValue(&I, Res);
|
setValue(&I, Res);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
case Intrinsic::annotation:
|
||||||
|
case Intrinsic::ptr_annotation:
|
||||||
|
// Drop the intrinsic, but forward the value
|
||||||
|
setValue(&I, getValue(I.getOperand(0)));
|
||||||
|
return 0;
|
||||||
case Intrinsic::var_annotation:
|
case Intrinsic::var_annotation:
|
||||||
// Discard annotate attributes
|
// Discard annotate attributes
|
||||||
return 0;
|
return 0;
|
||||||
|
15
test/CodeGen/Generic/annotate.ll
Normal file
15
test/CodeGen/Generic/annotate.ll
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
; RUN: llc < %s
|
||||||
|
|
||||||
|
; PR15253
|
||||||
|
|
||||||
|
@.str = private unnamed_addr constant [4 x i8] c"sth\00", section "llvm.metadata"
|
||||||
|
@.str1 = private unnamed_addr constant [4 x i8] c"t.c\00", section "llvm.metadata"
|
||||||
|
|
||||||
|
|
||||||
|
define i32 @foo(i32 %a) {
|
||||||
|
entry:
|
||||||
|
%0 = call i32 @llvm.annotation.i32(i32 %a, i8* getelementptr inbounds ([4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8]* @.str1, i32 0, i32 0), i32 2)
|
||||||
|
ret i32 %0
|
||||||
|
}
|
||||||
|
|
||||||
|
declare i32 @llvm.annotation.i32(i32, i8*, i8*, i32) #1
|
18
test/CodeGen/Generic/ptr-annotate.ll
Normal file
18
test/CodeGen/Generic/ptr-annotate.ll
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
; RUN: llc < %s
|
||||||
|
|
||||||
|
; PR15253
|
||||||
|
|
||||||
|
%struct.mystruct = type { i32 }
|
||||||
|
|
||||||
|
@.str = private unnamed_addr constant [4 x i8] c"sth\00", section "llvm.metadata"
|
||||||
|
@.str1 = private unnamed_addr constant [4 x i8] c"t.c\00", section "llvm.metadata"
|
||||||
|
|
||||||
|
define void @foo() {
|
||||||
|
entry:
|
||||||
|
%m = alloca i8, align 4
|
||||||
|
%0 = call i8* @llvm.ptr.annotation.p0i8(i8* %m, i8* getelementptr inbounds ([4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8]* @.str1, i32 0, i32 0), i32 2)
|
||||||
|
store i8 1, i8* %0, align 4
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
declare i8* @llvm.ptr.annotation.p0i8(i8*, i8*, i8*, i32) #1
|
Reference in New Issue
Block a user