<div dir="ltr">This causes <a href="http://llvm.org/bugs/show_bug.cgi?id=16083">http://llvm.org/bugs/show_bug.cgi?id=16083</a><div><br></div><div><pre class="" id="comment_text_0" style="white-space:pre-wrap;width:50em;color:rgb(0,0,0)">
long long a;
int b;
int fn1 () {
  return b || 0 & a;
}


% clang  -cc1 -triple i386-unknown-linux-gnu -emit-obj -x c bit.c 

clang: llvm/lib/IR/Type.cpp:306: static llvm::IntegerType *llvm::IntegerType::get(llvm::LLVMContext &, unsigned int): Assertion `NumBits >= MIN_INT_BITS && "bitwidth too small"' failed.</pre>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 16, 2013 at 10:47 PM, Benjamin Kramer <span dir="ltr"><<a href="mailto:benny.kra@googlemail.com" target="_blank">benny.kra@googlemail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: d0k<br>
Date: Thu May 16 13:47:58 2013<br>
New Revision: 182038<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=182038&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=182038&view=rev</a><br>
Log:<br>
DAGCombine: Also shrink eq compares where the constant is exactly as large as the smaller type.<br>
<br>
if ((x & 255) == 255)<br>
<br>
before: movzbl  %al, %eax<br>
        cmpl  $255, %eax<br>
<br>
after:  cmpb  $-1, %al<br>
<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp<br>
    llvm/trunk/test/CodeGen/X86/shrink-compare.ll<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=182038&r1=182037&r2=182038&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=182038&r1=182037&r2=182038&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Thu May 16 13:47:58 2013<br>
@@ -1160,7 +1160,7 @@ TargetLowering::SimplifySetCC(EVT VT, SD<br>
       }<br>
<br>
       // Make sure we're not losing bits from the constant.<br>
-      if (MinBits < C1.getBitWidth() && MinBits > C1.getActiveBits()) {<br>
+      if (MinBits < C1.getBitWidth() && MinBits >= C1.getActiveBits()) {<br>
         EVT MinVT = EVT::getIntegerVT(*DAG.getContext(), MinBits);<br>
         if (isTypeDesirableForOp(ISD::SETCC, MinVT)) {<br>
           // Will get folded away.<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/shrink-compare.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shrink-compare.ll?rev=182038&r1=182037&r2=182038&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shrink-compare.ll?rev=182038&r1=182037&r2=182038&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/shrink-compare.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/shrink-compare.ll Thu May 16 13:47:58 2013<br>
@@ -34,3 +34,19 @@ if.end:<br>
 ; CHECK: test2:<br>
 ; CHECK: cmpb $47, %{{dil|cl}}<br>
 }<br>
+<br>
+define void @test3(i32 %X) nounwind {<br>
+entry:<br>
+  %and = and i32 %X, 255<br>
+  %cmp = icmp eq i32 %and, 255<br>
+  br i1 %cmp, label %if.then, label %if.end<br>
+<br>
+if.then:<br>
+  tail call void @bar() nounwind<br>
+  br label %if.end<br>
+<br>
+if.end:<br>
+  ret void<br>
+; CHECK: test3:<br>
+; CHECK: cmpb $-1, %{{dil|cl}}<br>
+}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>