<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=""><div class="">Thanks David, that was r304489, right?  Indeed, it fixes the assertion.</div><div class=""><br class=""></div><div class="">-Dimitry</div><br class=""><div><blockquote type="cite" class=""><div class="">On 2 Jun 2017, at 18:37, Xinliang David Li <<a href="mailto:davidxl@google.com" class="">davidxl@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I already committed a fix. Did you still see the failure?<div class=""><br class=""></div><div class="">David</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Jun 2, 2017 at 5:33 AM, Dimitry Andric <span dir="ltr" class=""><<a href="mailto:dimitry@andric.com" target="_blank" class="">dimitry@andric.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Minimized test case:<br class="">
<br class="">
/* clang -cc1 -triple x86_64 -S -O1 test-int128.c */<br class="">
__int128 a;<br class="">
void c();<br class="">
void b() {<br class="">
  if (a == -1)<br class="">
    c();<br class="">
}<br class="">
<br class="">
Results in:<br class="">
<br class="">
Assertion failed: (getActiveBits() <= 64 && "Too many bits for uint64_t"), function getZExtValue, file include/llvm/ADT/APInt.h, line 1526.<br class="">
<br class="">
Program received signal SIGABRT, Aborted.<br class="">
0x00000008046815da in thr_kill () from /lib/libc.so.7<br class="">
(gdb) bt<br class="">
#0  0x00000008046815da in thr_kill () from /lib/libc.so.7<br class="">
#1  0x00000008046815a4 in raise () from /lib/libc.so.7<br class="">
#2  0x0000000804681519 in abort () from /lib/libc.so.7<br class="">
#3  0x00000008046fd371 in __assert () from /lib/libc.so.7<br class="">
#4  0x000000000112cce0 in lowerExpectIntrinsic(llvm::<wbr class="">Function&) ()<br class="">
#5  0x0000000000e41b8a in llvm::FPPassManager::<wbr class="">runOnFunction(llvm::Function&) ()<br class="">
#6  0x0000000000e41319 in llvm::legacy::<wbr class="">FunctionPassManagerImpl::run(<wbr class="">llvm::Function&) ()<br class="">
#7  0x0000000000e4119c in llvm::legacy::<wbr class="">FunctionPassManager::run(llvm:<wbr class="">:Function&) ()<br class="">
#8  0x00000000013d0dac in clang::EmitBackendOutput(<wbr class="">clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::__1::unique_ptr<llvm::<wbr class="">raw_pwrite_stream, std::__1::default_delete<llvm:<wbr class="">:raw_pwrite_stream> >) ()<br class="">
#9  0x0000000001a7c2ca in clang::BackendConsumer::<wbr class="">HandleTranslationUnit(clang::<wbr class="">ASTContext&) ()<br class="">
#10 0x0000000001d2cbe2 in clang::ParseAST(clang::Sema&, bool, bool) ()<br class="">
#11 0x000000000175d99c in clang::FrontendAction::<wbr class="">Execute() ()<br class="">
#12 0x0000000001725c31 in clang::CompilerInstance::<wbr class="">ExecuteAction(clang::<wbr class="">FrontendAction&) ()<br class="">
#13 0x00000000017dadb3 in clang::<wbr class="">ExecuteCompilerInvocation(<wbr class="">clang::CompilerInstance*) ()<br class="">
#14 0x0000000000721972 in cc1_main(llvm::ArrayRef<char const*>, char const*, void*) ()<br class="">
#15 0x000000000071fbc9 in main ()<br class="">
<span class="HOEnZb"><font color="#888888" class=""><br class="">
-Dimitry<br class="">
</font></span><div class="HOEnZb"><div class="h5"><br class="">
> On 2 Jun 2017, at 00:59, Xinliang David Li via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:<br class="">
><br class="">
> working on it.<br class="">
><br class="">
> On Thu, Jun 1, 2017 at 3:37 PM, Vedant Kumar <<a href="mailto:vsk@apple.com" class="">vsk@apple.com</a>> wrote:<br class="">
> Hi David,<br class="">
><br class="">
> I think this commit is causing a failure in the compiler-rt tests:<br class="">
> <a href="http://green.lab.llvm.org/green//job/clang-stage1-cmake-RA-expensive/6811" rel="noreferrer" target="_blank" class="">http://green.lab.llvm.org/<wbr class="">green//job/clang-stage1-cmake-<wbr class="">RA-expensive/6811</a><br class="">
><br class="">
> Could you take a look?<br class="">
><br class="">
> thanks,<br class="">
> vedant<br class="">
><br class="">
>> On Jun 1, 2017, at 12:05 PM, Xinliang David Li via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:<br class="">
>><br class="">
>> Author: davidxl<br class="">
>> Date: Thu Jun  1 14:05:55 2017<br class="">
>> New Revision: 304453<br class="">
>><br class="">
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=304453&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project?rev=304453&view=rev</a><br class="">
>> Log:<br class="">
>> [Profile] Fix builtin_expect lowering bug<br class="">
>><br class="">
>> The lowerer wrongly assumes the ICMP instruction<br class="">
>> 1) always has a constant operand;<br class="">
>> 2) the operand has value 0.<br class="">
>><br class="">
>> It also assumes the expected value can only be one, thus<br class="">
>> other values other than one will be considered 'zero'.<br class="">
>><br class="">
>> This leads to wrong profile annotation when other integer values<br class="">
>> are used other than 0, 1 in the comparison or in the expect intrinsic.<br class="">
>><br class="">
>> Also missing is handling of equal predicate.<br class="">
>><br class="">
>> This patch fixes all the above problems.<br class="">
>><br class="">
>> Differential Revision: <a href="http://reviews.llvm.org/D33757" rel="noreferrer" target="_blank" class="">http://reviews.llvm.org/D33757</a><br class="">
>><br class="">
>> Added:<br class="">
>>    llvm/trunk/test/Transforms/<wbr class="">LowerExpectIntrinsic/expect_<wbr class="">nonboolean.ll<br class="">
>> Modified:<br class="">
>>    llvm/trunk/lib/Transforms/<wbr class="">Scalar/LowerExpectIntrinsic.<wbr class="">cpp<br class="">
>><br class="">
>> Modified: llvm/trunk/lib/Transforms/<wbr class="">Scalar/LowerExpectIntrinsic.<wbr class="">cpp<br class="">
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LowerExpectIntrinsic.cpp?rev=304453&r1=304452&r2=304453&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/lib/<wbr class="">Transforms/Scalar/<wbr class="">LowerExpectIntrinsic.cpp?rev=<wbr class="">304453&r1=304452&r2=304453&<wbr class="">view=diff</a><br class="">
>> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
>> --- llvm/trunk/lib/Transforms/<wbr class="">Scalar/LowerExpectIntrinsic.<wbr class="">cpp (original)<br class="">
>> +++ llvm/trunk/lib/Transforms/<wbr class="">Scalar/LowerExpectIntrinsic.<wbr class="">cpp Thu Jun  1 14:05:55 2017<br class="">
>> @@ -98,11 +98,20 @@ template <class BrSelInst> static bool h<br class="">
>>   CallInst *CI;<br class="">
>><br class="">
>>   ICmpInst *CmpI = dyn_cast<ICmpInst>(BSI.<wbr class="">getCondition());<br class="">
>> +  CmpInst::Predicate Predicate;<br class="">
>> +  uint64_t ValueComparedTo = 0;<br class="">
>>   if (!CmpI) {<br class="">
>>     CI = dyn_cast<CallInst>(BSI.<wbr class="">getCondition());<br class="">
>> +    Predicate = CmpInst::ICMP_NE;<br class="">
>> +    ValueComparedTo = 0;<br class="">
>>   } else {<br class="">
>> -    if (CmpI->getPredicate() != CmpInst::ICMP_NE)<br class="">
>> +    Predicate = CmpI->getPredicate();<br class="">
>> +    if (Predicate != CmpInst::ICMP_NE && Predicate != CmpInst::ICMP_EQ)<br class="">
>>       return false;<br class="">
>> +    ConstantInt *CmpConstOperand = dyn_cast<ConstantInt>(CmpI-><wbr class="">getOperand(1));<br class="">
>> +    if (!CmpConstOperand)<br class="">
>> +      return false;<br class="">
>> +    ValueComparedTo = CmpConstOperand->getZExtValue(<wbr class="">);<br class="">
>>     CI = dyn_cast<CallInst>(CmpI-><wbr class="">getOperand(0));<br class="">
>>   }<br class="">
>><br class="">
>> @@ -121,9 +130,8 @@ template <class BrSelInst> static bool h<br class="">
>>   MDBuilder MDB(CI->getContext());<br class="">
>>   MDNode *Node;<br class="">
>><br class="">
>> -  // If expect value is equal to 1 it means that we are more likely to take<br class="">
>> -  // branch 0, in other case more likely is branch 1.<br class="">
>> -  if (ExpectedValue->isOne())<br class="">
>> +  if ((ExpectedValue->getZExtValue(<wbr class="">) == ValueComparedTo) ==<br class="">
>> +      (Predicate == CmpInst::ICMP_EQ))<br class="">
>>     Node = MDB.createBranchWeights(<wbr class="">LikelyBranchWeight, UnlikelyBranchWeight);<br class="">
>>   else<br class="">
>>     Node = MDB.createBranchWeights(<wbr class="">UnlikelyBranchWeight, LikelyBranchWeight);<br class="">
>><br class="">
>> Added: llvm/trunk/test/Transforms/<wbr class="">LowerExpectIntrinsic/expect_<wbr class="">nonboolean.ll<br class="">
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LowerExpectIntrinsic/expect_nonboolean.ll?rev=304453&view=auto" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/test/<wbr class="">Transforms/<wbr class="">LowerExpectIntrinsic/expect_<wbr class="">nonboolean.ll?rev=304453&view=<wbr class="">auto</a><br class="">
>> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
>> --- llvm/trunk/test/Transforms/<wbr class="">LowerExpectIntrinsic/expect_<wbr class="">nonboolean.ll (added)<br class="">
>> +++ llvm/trunk/test/Transforms/<wbr class="">LowerExpectIntrinsic/expect_<wbr class="">nonboolean.ll Thu Jun  1 14:05:55 2017<br class="">
>> @@ -0,0 +1,104 @@<br class="">
>> +; RUN: opt -lower-expect  -S -o - < %s | FileCheck %s<br class="">
>> +; RUN: opt -S -passes='function(lower-<wbr class="">expect)' < %s | FileCheck %s<br class="">
>> +<br class="">
>> +define i32 @foo(i32 %arg) #0 {<br class="">
>> +; CHECK-LABEL: @foo(i32{{.*}})<br class="">
>> +bb:<br class="">
>> +  %tmp = sext i32 %arg to i64<br class="">
>> +  %tmp1 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)<br class="">
>> +  %tmp2 = icmp ne i64 %tmp1, 0<br class="">
>> +  br i1 %tmp2, label %bb3, label %bb5<br class="">
>> +; CHECK: br i1 %tmp2{{.*}}!prof [[LIKELY:![0-9]+]]<br class="">
>> +<br class="">
>> +bb3:                                              ; preds = %bb<br class="">
>> +  %tmp4 = call i32 (...) @bar()<br class="">
>> +  br label %bb5<br class="">
>> +<br class="">
>> +bb5:                                              ; preds = %bb3, %bb<br class="">
>> +  ret i32 1<br class="">
>> +}<br class="">
>> +<br class="">
>> +define i32 @foo2(i32 %arg) #0 {<br class="">
>> +; CHECK-LABEL: @foo2<br class="">
>> +bb:<br class="">
>> +  %tmp = sext i32 %arg to i64<br class="">
>> +  %tmp1 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)<br class="">
>> +  %tmp2 = icmp eq i64 %tmp1, 2<br class="">
>> +  br i1 %tmp2, label %bb3, label %bb5<br class="">
>> +; CHECK: br i1 %tmp2{{.*}}!prof [[UNLIKELY:![0-9]+]]<br class="">
>> +<br class="">
>> +bb3:                                              ; preds = %bb<br class="">
>> +  %tmp4 = call i32 (...) @bar()<br class="">
>> +  br label %bb5<br class="">
>> +<br class="">
>> +bb5:                                              ; preds = %bb3, %bb<br class="">
>> +  ret i32 1<br class="">
>> +}<br class="">
>> +<br class="">
>> +define i32 @foo3(i32 %arg) #0 {<br class="">
>> +; CHECK-LABEL: @foo3<br class="">
>> +bb:<br class="">
>> +  %tmp = sext i32 %arg to i64<br class="">
>> +  %tmp1 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)<br class="">
>> +  %tmp2 = icmp eq i64 %tmp1, 4<br class="">
>> +  br i1 %tmp2, label %bb3, label %bb5<br class="">
>> +; CHECK: br i1 %tmp2{{.*}}!prof [[LIKELY]]<br class="">
>> +<br class="">
>> +bb3:                                              ; preds = %bb<br class="">
>> +  %tmp4 = call i32 (...) @bar()<br class="">
>> +  br label %bb5<br class="">
>> +<br class="">
>> +bb5:                                              ; preds = %bb3, %bb<br class="">
>> +  ret i32 1<br class="">
>> +}<br class="">
>> +<br class="">
>> +define i32 @foo4(i32 %arg) #0 {<br class="">
>> +; CHECK-LABEL: @foo4<br class="">
>> +bb:<br class="">
>> +  %tmp = sext i32 %arg to i64<br class="">
>> +  %tmp1 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)<br class="">
>> +  %tmp2 = icmp ne i64 %tmp1, 2<br class="">
>> +  br i1 %tmp2, label %bb3, label %bb5<br class="">
>> +; CHECK: br i1 %tmp2{{.*}}!prof [[LIKELY]]<br class="">
>> +<br class="">
>> +bb3:                                              ; preds = %bb<br class="">
>> +  %tmp4 = call i32 (...) @bar()<br class="">
>> +  br label %bb5<br class="">
>> +<br class="">
>> +bb5:                                              ; preds = %bb3, %bb<br class="">
>> +  ret i32 1<br class="">
>> +}<br class="">
>> +<br class="">
>> +define i32 @foo5(i32 %arg, i32 %arg1) #0 {<br class="">
>> +; CHECK-LABEL: @foo5<br class="">
>> +bb:<br class="">
>> +  %tmp = sext i32 %arg1 to i64<br class="">
>> +  %tmp2 = call i64 @llvm.expect.i64(i64 %tmp, i64 4)<br class="">
>> +  %tmp3 = sext i32 %arg to i64<br class="">
>> +  %tmp4 = icmp ne i64 %tmp2, %tmp3<br class="">
>> +  br i1 %tmp4, label %bb5, label %bb7<br class="">
>> +; CHECK-NOT: !prof<br class="">
>> +<br class="">
>> +bb5:                                              ; preds = %bb<br class="">
>> +  %tmp6 = call i32 (...) @bar()<br class="">
>> +  br label %bb7<br class="">
>> +<br class="">
>> +bb7:                                              ; preds = %bb5, %bb<br class="">
>> +  ret i32 1<br class="">
>> +}<br class="">
>> +<br class="">
>> +declare i64 @llvm.expect.i64(i64, i64) #1<br class="">
>> +<br class="">
>> +declare i32 @bar(...) local_unnamed_addr #0<br class="">
>> +<br class="">
>> +attributes #0 = { nounwind uwtable }<br class="">
>> +attributes #1 = { nounwind readnone }<br class="">
>> +<br class="">
>> +!llvm.module.flags = !{!0}<br class="">
>> +!llvm.ident = !{!1}<br class="">
>> +<br class="">
>> +!0 = !{i32 1, !"wchar_size", i32 4}<br class="">
>> +!1 = !{!"clang version 5.0.0 (trunk 304373)"}<br class="">
>> +; CHECK: [[LIKELY]] = !{!"branch_weights", i32 2000, i32 1}<br class="">
>> +; CHECK: [[UNLIKELY]] = !{!"branch_weights", i32 1, i32 2000}<br class="">
>> +<br class="">
>><br class="">
>><br class="">
>> ______________________________<wbr 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="">
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/llvm-commits</a><br class="">
><br class="">
><br class="">
> ______________________________<wbr 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="">
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/llvm-commits</a><br class="">
<br class="">
</div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></body></html>