From d32e4c9f0d6fb8a7884d84e5c2c669f2b73b8f9f Mon Sep 17 00:00:00 2001 From: Asaf Badouh Date: Mon, 23 May 2016 14:04:17 +0000 Subject: [PATCH] [X86][RTM] _xabort() should not have "noreturn" attribute Differential Revision: http://reviews.llvm.org/D20518 llvm-svn: 270437 --- llvm/include/llvm/IR/IntrinsicsX86.td | 2 +- llvm/test/CodeGen/X86/rtm.ll | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/llvm/include/llvm/IR/IntrinsicsX86.td b/llvm/include/llvm/IR/IntrinsicsX86.td index 7e7b1013fe129..9643eeb66fd35 100644 --- a/llvm/include/llvm/IR/IntrinsicsX86.td +++ b/llvm/include/llvm/IR/IntrinsicsX86.td @@ -4995,7 +4995,7 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". def int_x86_xend : GCCBuiltin<"__builtin_ia32_xend">, Intrinsic<[], [], []>; def int_x86_xabort : GCCBuiltin<"__builtin_ia32_xabort">, - Intrinsic<[], [llvm_i8_ty], [IntrNoReturn]>; + Intrinsic<[], [llvm_i8_ty], []>; def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">, Intrinsic<[llvm_i32_ty], [], []>; } diff --git a/llvm/test/CodeGen/X86/rtm.ll b/llvm/test/CodeGen/X86/rtm.ll index 76eb9514f02cc..fb06cac45fffb 100644 --- a/llvm/test/CodeGen/X86/rtm.ll +++ b/llvm/test/CodeGen/X86/rtm.ll @@ -2,7 +2,8 @@ declare i32 @llvm.x86.xbegin() nounwind declare void @llvm.x86.xend() nounwind -declare void @llvm.x86.xabort(i8) noreturn nounwind +declare void @llvm.x86.xabort(i8) nounwind +declare void @f1() define i32 @test_xbegin() nounwind uwtable { entry: @@ -24,7 +25,20 @@ entry: define void @test_xabort() nounwind uwtable { entry: tail call void @llvm.x86.xabort(i8 2) - unreachable + ret void ; CHECK: test_xabort ; CHECK: xabort $2 } + +define void @f2(i32 %x) nounwind uwtable { +entry: + %x.addr = alloca i32, align 4 + store i32 %x, i32* %x.addr, align 4 + call void @llvm.x86.xabort(i8 1) + call void @f1() + ret void +; CHECK-LABEL: f2 +; CHECK: xabort $1 +; CHECK: callq f1 +} + \ No newline at end of file