<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">This change caused the following bot failure:<div class=""><br class=""></div><div class=""><a href="http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_check/12131/consoleFull#6159817088254eaf0-7326-4999-85b0-388101f2d404" class="">http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_check/12131/consoleFull#6159817088254eaf0-7326-4999-85b0-388101f2d404</a></div><div class=""><br class=""></div><div class="">-Chris</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Aug 13, 2015, at 10:40 AM, Igor Laevsky via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">Author: igor.laevsky<br class="">Date: Thu Aug 13 12:40:04 2015<br class="">New Revision: 244920<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=244920&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=244920&view=rev</a><br class="">Log:<br class="">Emit argmemonly attribute for intrinsics.<br class=""><br class="">Differential Revision: <a href="http://reviews.llvm.org/D11352" class="">http://reviews.llvm.org/D11352</a><br class=""><br class=""><br class="">Modified:<br class="">    llvm/trunk/test/Analysis/BasicAA/cs-cs.ll<br class="">    llvm/trunk/test/Analysis/BasicAA/intrinsics.ll<br class="">    llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/intrinsics.ll<br class="">    llvm/trunk/test/Bitcode/compatibility-3.6.ll<br class="">    llvm/trunk/test/Bitcode/compatibility.ll<br class="">    llvm/trunk/test/Transforms/Inline/inline_invoke.ll<br class="">    llvm/trunk/test/Transforms/Inline/noalias-calls.ll<br class="">    llvm/trunk/test/Transforms/MemCpyOpt/memcpy.ll<br class="">    llvm/trunk/test/Transforms/ObjCARC/nested.ll<br class="">    llvm/trunk/utils/TableGen/CodeGenIntrinsics.h<br class="">    llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp<br class=""><br class="">Modified: llvm/trunk/test/Analysis/BasicAA/cs-cs.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/cs-cs.ll?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/cs-cs.ll?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Analysis/BasicAA/cs-cs.ll (original)<br class="">+++ llvm/trunk/test/Analysis/BasicAA/cs-cs.ll Thu Aug 13 12:40:04 2015<br class="">@@ -22,18 +22,18 @@ entry:<br class=""> ; CHECK-LABEL: Function: test1:<br class=""><br class=""> ; CHECK: NoAlias:      i8* %p, i8* %q<br class="">-; CHECK: Just Ref:  Ptr: i8* %p        <->  %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1<br class="">-; CHECK: NoModRef:  Ptr: i8* %q        <->  %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1<br class="">+; CHECK: Just Ref:  Ptr: i8* %p        <->  %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4<br class="">+; CHECK: NoModRef:  Ptr: i8* %q        <->  %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4<br class=""> ; CHECK: NoModRef:  Ptr: i8* %p        <->  call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)<br class=""> ; CHECK: Both ModRef:  Ptr: i8* %q     <->  call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)<br class="">-; CHECK: Just Ref:  Ptr: i8* %p        <->  %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1<br class="">-; CHECK: NoModRef:  Ptr: i8* %q        <->  %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1<br class="">-; CHECK: NoModRef:   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1 <->   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)<br class="">-; CHECK: NoModRef:   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1 <->   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1<br class="">-; CHECK: NoModRef:   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16) <->   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1<br class="">-; CHECK: NoModRef:   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16) <->   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1<br class="">-; CHECK: NoModRef:   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1 <->   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1<br class="">-; CHECK: NoModRef:   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #1 <->   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)<br class="">+; CHECK: Just Ref:  Ptr: i8* %p        <->  %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4<br class="">+; CHECK: NoModRef:  Ptr: i8* %q        <->  %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4<br class="">+; CHECK: NoModRef:   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4 <->   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)<br class="">+; CHECK: NoModRef:   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4 <->   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4<br class="">+; CHECK: NoModRef:   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16) <->   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4<br class="">+; CHECK: NoModRef:   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16) <->   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4<br class="">+; CHECK: NoModRef:   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4 <->   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4<br class="">+; CHECK: NoModRef:   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) #4 <->   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)<br class=""> }<br class=""><br class=""> define void @test2(i8* %P, i8* %Q) nounwind ssp {<br class="">@@ -233,7 +233,9 @@ define void @test6(i8* %P) nounwind ssp<br class=""> ; CHECK: Just Ref:   call void @a_readonly_func(i8* %P) <->   call void @llvm.memset.p0i8.i64(i8* %P, i8 -51, i64 32, i32 8, i1 false)<br class=""> }<br class=""><br class="">-attributes #0 = { nounwind readonly }<br class="">-attributes #1 = { nounwind }<br class="">+attributes #0 = { nounwind readonly argmemonly }<br class="">+attributes #1 = { nounwind argmemonly }<br class=""> attributes #2 = { noinline nounwind readonly }<br class=""> attributes #3 = { nounwind ssp }<br class="">+attributes #4 = { nounwind }<br class="">+<br class=""><br class="">Modified: llvm/trunk/test/Analysis/BasicAA/intrinsics.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/intrinsics.ll?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/intrinsics.ll?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Analysis/BasicAA/intrinsics.ll (original)<br class="">+++ llvm/trunk/test/Analysis/BasicAA/intrinsics.ll Thu Aug 13 12:40:04 2015<br class="">@@ -38,5 +38,6 @@ entry:<br class=""> declare <8 x i16> @llvm.arm.neon.vld1.v8i16(i8*, i32) nounwind readonly<br class=""> declare void @llvm.arm.neon.vst1.v8i16(i8*, <8 x i16>, i32) nounwind<br class=""><br class="">-; CHECK: attributes #0 = { nounwind readonly }<br class="">+; CHECK: attributes #0 = { nounwind readonly argmemonly }<br class="">+; CHECK: attributes #1 = { nounwind argmemonly }<br class=""> ; CHECK: attributes [[ATTR]] = { nounwind }<br class=""><br class="">Modified: llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/intrinsics.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/intrinsics.ll?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/intrinsics.ll?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/intrinsics.ll (original)<br class="">+++ llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/intrinsics.ll Thu Aug 13 12:40:04 2015<br class="">@@ -22,7 +22,8 @@ entry:<br class=""> declare <8 x i16> @llvm.arm.neon.vld1.v8i16(i8*, i32) nounwind readonly<br class=""> declare void @llvm.arm.neon.vst1.v8i16(i8*, <8 x i16>, i32) nounwind<br class=""><br class="">-; CHECK: attributes #0 = { nounwind readonly }<br class="">+; CHECK: attributes #0 = { nounwind readonly argmemonly }<br class="">+; CHECK: attributes #1 = { nounwind argmemonly }<br class=""> ; CHECK: attributes [[NUW]] = { nounwind }<br class=""><br class=""> !0 = !{!"tbaa root", null}<br class=""><br class="">Modified: llvm/trunk/test/Bitcode/compatibility-3.6.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/compatibility-3.6.ll?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/compatibility-3.6.ll?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Bitcode/compatibility-3.6.ll (original)<br class="">+++ llvm/trunk/test/Bitcode/compatibility-3.6.ll Thu Aug 13 12:40:04 2015<br class="">@@ -981,7 +981,7 @@ exit:<br class="">   ; CHECK: select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2><br class=""><br class="">   call void @f.nobuiltin() builtin<br class="">-  ; CHECK: call void @f.nobuiltin() #31<br class="">+  ; CHECK: call void @f.nobuiltin() #33<br class=""><br class="">   call fastcc noalias i32* @f.noalias() noinline<br class="">   ; CHECK: call fastcc noalias i32* @f.noalias() #11<br class="">@@ -1179,7 +1179,11 @@ define void @intrinsics.codegen() {<br class=""> ; CHECK: attributes #26 = { sspstrong }<br class=""> ; CHECK: attributes #27 = { uwtable }<br class=""> ; CHECK: attributes #28 = { "cpu"="cortex-a8" }<br class="">-; CHECK: attributes #31 = { builtin }<br class="">+; CHECK: attributes #29 = { nounwind readnone }<br class="">+; CHECK: attributes #30 = { nounwind readonly argmemonly }<br class="">+; CHECK: attributes #31 = { nounwind argmemonly }<br class="">+; CHECK: attributes #32 = { nounwind readonly }<br class="">+; CHECK: attributes #33 = { builtin }<br class=""><br class=""> ;; Metadata<br class=""><br class=""><br class="">Modified: llvm/trunk/test/Bitcode/compatibility.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/compatibility.ll?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/compatibility.ll?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Bitcode/compatibility.ll (original)<br class="">+++ llvm/trunk/test/Bitcode/compatibility.ll Thu Aug 13 12:40:04 2015<br class="">@@ -1024,7 +1024,7 @@ exit:<br class="">   ; CHECK: select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2><br class=""><br class="">   call void @f.nobuiltin() builtin<br class="">-  ; CHECK: call void @f.nobuiltin() #34<br class="">+  ; CHECK: call void @f.nobuiltin() #36<br class=""><br class="">   call fastcc noalias i32* @f.noalias() noinline<br class="">   ; CHECK: call fastcc noalias i32* @f.noalias() #12<br class="">@@ -1245,8 +1245,10 @@ define void @misc.metadata() {<br class=""> ; CHECK: attributes #30 = { uwtable }<br class=""> ; CHECK: attributes #31 = { "cpu"="cortex-a8" }<br class=""> ; CHECK: attributes #32 = { nounwind readnone }<br class="">-; CHECK: attributes #33 = { nounwind readonly }<br class="">-; CHECK: attributes #34 = { builtin }<br class="">+; CHECK: attributes #33 = { nounwind readonly argmemonly }<br class="">+; CHECK: attributes #34 = { nounwind argmemonly }<br class="">+; CHECK: attributes #35 = { nounwind readonly }<br class="">+; CHECK: attributes #36 = { builtin }<br class=""><br class=""> ;; Metadata<br class=""><br class=""><br class="">Modified: llvm/trunk/test/Transforms/Inline/inline_invoke.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline_invoke.ll?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline_invoke.ll?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Transforms/Inline/inline_invoke.ll (original)<br class="">+++ llvm/trunk/test/Transforms/Inline/inline_invoke.ll Thu Aug 13 12:40:04 2015<br class="">@@ -344,4 +344,5 @@ terminate:<br class=""> ; CHECK: attributes [[NUW]] = { nounwind }<br class=""> ; CHECK: attributes #1 = { nounwind readnone }<br class=""> ; CHECK: attributes #2 = { ssp uwtable }<br class="">-; CHECK: attributes #3 = { noreturn nounwind }<br class="">+; CHECK: attributes #3 = { nounwind argmemonly }<br class="">+; CHECK: attributes #4 = { noreturn nounwind }<br class=""><br class="">Modified: llvm/trunk/test/Transforms/Inline/noalias-calls.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/noalias-calls.ll?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/noalias-calls.ll?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Transforms/Inline/noalias-calls.ll (original)<br class="">+++ llvm/trunk/test/Transforms/Inline/noalias-calls.ll Thu Aug 13 12:40:04 2015<br class="">@@ -16,24 +16,25 @@ entry:<br class="">   ret void<br class=""> }<br class=""><br class="">-define void @foo(i8* nocapture %a, i8* nocapture readonly %c, i8* nocapture %b) #1 {<br class="">+define void @foo(i8* nocapture %a, i8* nocapture readonly %c, i8* nocapture %b) #2 {<br class=""> entry:<br class="">   tail call void @hello(i8* %a, i8* %c, i8* %b)<br class="">   ret void<br class=""> }<br class=""><br class="">-; CHECK: define void @foo(i8* nocapture %a, i8* nocapture readonly %c, i8* nocapture %b) #1 {<br class="">+; CHECK: define void @foo(i8* nocapture %a, i8* nocapture readonly %c, i8* nocapture %b) #2 {<br class=""> ; CHECK: entry:<br class="">-; CHECK:   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %b, i64 16, i32 16, i1 false) #0, !noalias !0<br class="">-; CHECK:   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %b, i8* %c, i64 16, i32 16, i1 false) #0, !noalias !3<br class="">-; CHECK:   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %c, i64 16, i32 16, i1 false) #0, !alias.scope !5<br class="">-; CHECK:   call void @hey() #0, !noalias !5<br class="">-; CHECK:   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %{{.*}}, i8* %c, i64 16, i32 16, i1 false) #0, !noalias !3<br class="">+; CHECK:   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %b, i64 16, i32 16, i1 false) #1, !noalias !0<br class="">+; CHECK:   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %b, i8* %c, i64 16, i32 16, i1 false) #1, !noalias !3<br class="">+; CHECK:   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %c, i64 16, i32 16, i1 false) #1, !alias.scope !5<br class="">+; CHECK:   call void @hey() #1, !noalias !5<br class="">+; CHECK:   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %{{.*}}, i8* %c, i64 16, i32 16, i1 false) #1, !noalias !3<br class=""> ; CHECK:   ret void<br class=""> ; CHECK: }<br class=""><br class="">-attributes #0 = { nounwind }<br class="">-attributes #1 = { nounwind uwtable }<br class="">+attributes #0 = { nounwind argmemonly }<br class="">+attributes #1 = { nounwind }<br class="">+attributes #2 = { nounwind uwtable }<br class=""><br class=""> ; CHECK: !0 = !{!1}<br class=""> ; CHECK: !1 = distinct !{!1, !2, !"hello: %c"}<br class=""><br class="">Modified: llvm/trunk/test/Transforms/MemCpyOpt/memcpy.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/MemCpyOpt/memcpy.ll?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/MemCpyOpt/memcpy.ll?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Transforms/MemCpyOpt/memcpy.ll (original)<br class="">+++ llvm/trunk/test/Transforms/MemCpyOpt/memcpy.ll Thu Aug 13 12:40:04 2015<br class="">@@ -206,5 +206,6 @@ declare void @f1(%struct.big* nocapture<br class=""> declare void @f2(%struct.big*)<br class=""><br class=""> ; CHECK: attributes [[NUW]] = { nounwind }<br class="">-; CHECK: attributes #1 = { nounwind ssp }<br class="">-; CHECK: attributes #2 = { nounwind ssp uwtable }<br class="">+; CHECK: attributes #1 = { nounwind argmemonly }<br class="">+; CHECK: attributes #2 = { nounwind ssp }<br class="">+; CHECK: attributes #3 = { nounwind ssp uwtable }<br class=""><br class="">Modified: llvm/trunk/test/Transforms/ObjCARC/nested.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ObjCARC/nested.ll?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ObjCARC/nested.ll?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/Transforms/ObjCARC/nested.ll (original)<br class="">+++ llvm/trunk/test/Transforms/ObjCARC/nested.ll Thu Aug 13 12:40:04 2015<br class="">@@ -819,5 +819,7 @@ entry:<br class="">   ret void<br class=""> }<br class=""><br class="">-; CHECK: attributes [[NUW]] = { nounwind }<br class="">+<br class="">+; CHECK: attributes #0 = { nounwind argmemonly }<br class=""> ; CHECK: attributes #1 = { nonlazybind }<br class="">+; CHECK: attributes [[NUW]] = { nounwind }<br class=""><br class="">Modified: llvm/trunk/utils/TableGen/CodeGenIntrinsics.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenIntrinsics.h?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenIntrinsics.h?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/utils/TableGen/CodeGenIntrinsics.h (original)<br class="">+++ llvm/trunk/utils/TableGen/CodeGenIntrinsics.h Thu Aug 13 12:40:04 2015<br class="">@@ -60,9 +60,10 @@ namespace llvm {<br class="">     IntrinsicSignature IS;<br class=""><br class="">     // Memory mod/ref behavior of this intrinsic.<br class="">-    enum {<br class="">+    enum ModRefKind {<br class="">       NoMem, ReadArgMem, ReadMem, ReadWriteArgMem, ReadWriteMem<br class="">-    } ModRef;<br class="">+    };<br class="">+    ModRefKind ModRef;<br class=""><br class="">     /// This is set to true if the intrinsic is overloaded by its argument<br class="">     /// types.<br class=""><br class="">Modified: llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp?rev=244920&r1=244919&r2=244920&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp?rev=244920&r1=244919&r2=244920&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp (original)<br class="">+++ llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp Thu Aug 13 12:40:04 2015<br class="">@@ -503,28 +503,6 @@ void IntrinsicEmitter::EmitGenerator(con<br class=""> }<br class=""><br class=""> namespace {<br class="">-enum ModRefKind {<br class="">-  MRK_none,<br class="">-  MRK_readonly,<br class="">-  MRK_readnone<br class="">-};<br class="">-}<br class="">-<br class="">-static ModRefKind getModRefKind(const CodeGenIntrinsic &intrinsic) {<br class="">-  switch (intrinsic.ModRef) {<br class="">-  case CodeGenIntrinsic::NoMem:<br class="">-    return MRK_readnone;<br class="">-  case CodeGenIntrinsic::ReadArgMem:<br class="">-  case CodeGenIntrinsic::ReadMem:<br class="">-    return MRK_readonly;<br class="">-  case CodeGenIntrinsic::ReadWriteArgMem:<br class="">-  case CodeGenIntrinsic::ReadWriteMem:<br class="">-    return MRK_none;<br class="">-  }<br class="">-  llvm_unreachable("bad mod-ref kind");<br class="">-}<br class="">-<br class="">-namespace {<br class=""> struct AttributeComparator {<br class="">   bool operator()(const CodeGenIntrinsic *L, const CodeGenIntrinsic *R) const {<br class="">     // Sort throwing intrinsics after non-throwing intrinsics.<br class="">@@ -541,8 +519,8 @@ struct AttributeComparator {<br class="">       return R->isConvergent;<br class=""><br class="">     // Try to order by readonly/readnone attribute.<br class="">-    ModRefKind LK = getModRefKind(*L);<br class="">-    ModRefKind RK = getModRefKind(*R);<br class="">+    CodeGenIntrinsic::ModRefKind LK = L->ModRef;<br class="">+    CodeGenIntrinsic::ModRefKind RK = R->ModRef;<br class="">     if (LK != RK) return (LK > RK);<br class=""><br class="">     // Order by argument attributes.<br class="">@@ -649,10 +627,10 @@ EmitAttributes(const std::vector<CodeGen<br class="">       }<br class="">     }<br class=""><br class="">-    ModRefKind modRef = getModRefKind(intrinsic);<br class="">-<br class="">-    if (!intrinsic.canThrow || modRef || intrinsic.isNoReturn ||<br class="">-        intrinsic.isNoDuplicate || intrinsic.isConvergent) {<br class="">+    if (!intrinsic.canThrow ||<br class="">+        intrinsic.ModRef != CodeGenIntrinsic::ReadWriteMem ||<br class="">+        intrinsic.isNoReturn || intrinsic.isNoDuplicate ||<br class="">+        intrinsic.isConvergent) {<br class="">       OS << "      const Attribute::AttrKind Atts[] = {";<br class="">       bool addComma = false;<br class="">       if (!intrinsic.canThrow) {<br class="">@@ -678,17 +656,29 @@ EmitAttributes(const std::vector<CodeGen<br class="">         addComma = true;<br class="">       }<br class=""><br class="">-      switch (modRef) {<br class="">-      case MRK_none: break;<br class="">-      case MRK_readonly:<br class="">+      switch (intrinsic.ModRef) {<br class="">+      case CodeGenIntrinsic::NoMem:<br class="">+        if (addComma)<br class="">+          OS << ",";<br class="">+        OS << "Attribute::ReadNone";<br class="">+        break;<br class="">+      case CodeGenIntrinsic::ReadArgMem:<br class="">+        if (addComma)<br class="">+          OS << ",";<br class="">+        OS << "Attribute::ReadOnly,";<br class="">+        OS << "Attribute::ArgMemOnly";<br class="">+        break;<br class="">+      case CodeGenIntrinsic::ReadMem:<br class="">         if (addComma)<br class="">           OS << ",";<br class="">         OS << "Attribute::ReadOnly";<br class="">         break;<br class="">-      case MRK_readnone:<br class="">+      case CodeGenIntrinsic::ReadWriteArgMem:<br class="">         if (addComma)<br class="">           OS << ",";<br class="">-        OS << "Attribute::ReadNone";<br class="">+        OS << "Attribute::ArgMemOnly";<br class="">+        break;<br class="">+      case CodeGenIntrinsic::ReadWriteMem:<br class="">         break;<br class="">       }<br class="">       OS << "};\n";<br class=""><br class=""><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></div></blockquote></div><br class=""></div></body></html>