Commit f18b8f68 authored by Bill Wendling's avatar Bill Wendling
Browse files

Merging r182387:

------------------------------------------------------------------------
r182387 | jholewinski | 2013-05-21 07:37:16 -0700 (Tue, 21 May 2013) | 7 lines

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!
------------------------------------------------------------------------

llvm-svn: 182417
parent c7b127f1
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -453,6 +453,12 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
    CI->replaceAllUsesWith(ConstantInt::get(CI->getType(), 1));
    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:
    break;   // Strip out annotate intrinsic
    
+5 −0
Original line number Diff line number Diff line
@@ -5034,6 +5034,11 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
    setValue(&I, Res);
    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:
    // Discard annotate attributes
    return 0;
+15 −0
Original line number Diff line number Diff line
; 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 −0
Original line number Diff line number Diff line
; 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