<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
p.emailquote, li.emailquote, div.emailquote
        {mso-style-name:emailquote;
        mso-style-priority:99;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:1.0pt;
        margin-bottom:.0001pt;
        border:none;
        padding:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Hi Pablo,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Thank you for doing this.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>I also take another look at your patch.  I think you may only need to unfold selects belonging to the same basic block.  If they are in two different blocks, my understanding is that current jumpthreading implementation does not have the capability of optimizing the unfolded blocks without something like https://reviews.llvm.org/D22779.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Best,<o:p></o:p></span></p><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Haicheng Wu<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Employee of Qualcomm Datacenter Technologies, Inc.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.  Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.<o:p></o:p></span></p></div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'> Pablo Barrio [mailto:Pablo.Barrio@arm.com] <br><b>Sent:</b> Tuesday, November 15, 2016 10:15 AM<br><b>To:</b> mcrosier@codeaurora.org<br><b>Cc:</b> haicheng@codeaurora.org; llvm-commits@lists.llvm.org<br><b>Subject:</b> Re: [llvm] r286236 - [JumpThreading] Unfold selects that depend on the same condition<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div id="x_divtagdefaultwrapper"><p><span style='font-family:"Calibri",sans-serif;color:black'>Sure, I'll revert now.<o:p></o:p></span></p></div><div class=MsoNormal align=center style='text-align:center'><hr size=2 width="98%" align=center></div><div id="x_divRplyFwdMsg"><p class=MsoNormal><b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'>From:</span></b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'> </span><a href="mailto:mcrosier@codeaurora.org"><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>mcrosier@codeaurora.org</span></a><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'> <</span><a href="mailto:mcrosier@codeaurora.org"><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>mcrosier@codeaurora.org</span></a><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'>><br><b>Sent:</b> 15 November 2016 14:18:20<br><b>To:</b> Pablo Barrio<br><b>Cc:</b> </span><a href="mailto:haicheng@codeaurora.org"><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>haicheng@codeaurora.org</span></a><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'>; </span><a href="mailto:llvm-commits@lists.llvm.org"><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>llvm-commits@lists.llvm.org</span></a><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'><br><b>Subject:</b> Re: [llvm] r286236 - [JumpThreading] Unfold selects that depend on the same condition</span> <o:p></o:p></p><div><p class=MsoNormal> <o:p></o:p></p></div></div></div><div><p class=MsoNormal><span style='font-size:10.0pt'>Hi Pablo,<br>Thanks for taking a look at this.  If you don't think you'll have a fix <br>in the very near future would you mind reverting your commit while you <br>investigate?<br><br>  Chad<br><br>On 2016-11-15 05:44, Pablo Barrio via llvm-commits wrote:<br>> Thank you Hai, I will have a look at it now.<br>> <br>> Pablo<br>> <br>> -------------------------<br>> <br>> FROM: </span><a href="mailto:haicheng@codeaurora.org"><span style='font-size:10.0pt'>haicheng@codeaurora.org</span></a><span style='font-size:10.0pt'> <</span><a href="mailto:haicheng@codeaurora.org"><span style='font-size:10.0pt'>haicheng@codeaurora.org</span></a><span style='font-size:10.0pt'>><br>> SENT: 15 November 2016 03:24:37<br>> TO: Pablo Barrio<br>> CC: </span><a href="mailto:llvm-commits@lists.llvm.org"><span style='font-size:10.0pt'>llvm-commits@lists.llvm.org</span></a><span style='font-size:10.0pt'><br>> SUBJECT: RE: [llvm] r286236 - [JumpThreading] Unfold selects that<br>> depend on the same condition<br>> <br>> Hi Pablo,<br>> <br>> It seems that your jumpthreading patch r286236 miscompiles<br>> llvm-test-suite/MultiSource/Benchmarks/SciMark2-C/scimark2 when using<br>> O3+LTO<br>> and running on AArch64.<br>> <br>> Here is the flag I used to compile " -O3 -flto -fuse-ld=gold<br>> -mcpu=cortex-a57"<br>> I used normal input size and got seg fault. Small input size seems<br>> okay.<br>> <br>> Please let me know if you need more information.<br>> <br>> Haicheng Wu<br>> Employee of Qualcomm Datacenter Technologies, Inc.<br>> Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm<br>> Technologies, Inc.  Qualcomm Technologies, Inc. is a member of the<br>> Code<br>> Aurora Forum, a Linux Foundation Collaborative Project.<br>> <br>> -----Original Message-----<br>>  From: llvm-commits [</span><a href="mailto:llvm-commits-bounces@lists.llvm.org"><span style='font-size:10.0pt'>mailto:llvm-commits-bounces@lists.llvm.org</span></a><span style='font-size:10.0pt'>] On<br>> Behalf Of<br>> Pablo Barrio via llvm-commits<br>> Sent: Tuesday, November 08, 2016 9:54 AM<br>> To: </span><a href="mailto:llvm-commits@lists.llvm.org"><span style='font-size:10.0pt'>llvm-commits@lists.llvm.org</span></a><span style='font-size:10.0pt'><br>> Subject: [llvm] r286236 - [JumpThreading] Unfold selects that depend<br>> on<br>> the<br>> same condition<br>> <br>> Author: pabbar01<br>> Date: Tue Nov  8 08:53:30 2016<br>> New Revision: 286236<br>> <br>> URL: </span><a href="http://llvm.org/viewvc/llvm-project?rev=286236&view=rev"><span style='font-size:10.0pt'>http://llvm.org/viewvc/llvm-project?rev=286236&view=rev</span></a><span style='font-size:10.0pt'><br>> Log:<br>> [JumpThreading] Unfold selects that depend on the same condition<br>> <br>> Summary:<br>> These are good candidates for jump threading. This enables later opts<br>> (such<br>> as InstCombine) to combine instructions from the selects with<br>> instructions<br>> out of the selects. SimplifyCFG will fold the select again if<br>> unfolding<br>> wasn't worth it.<br>> <br>> Patch by James Molloy and Pablo Barrio.<br>> <br>> Reviewers: rengolin, haicheng, sebpop<br>> <br>> Subscribers: jojo, jmolloy, llvm-commits<br>> <br>> Differential Revision: </span><a href="https://reviews.llvm.org/D26391"><span style='font-size:10.0pt'>https://reviews.llvm.org/D26391</span></a><span style='font-size:10.0pt'><br>> <br>> Added:<br>> <br>> llvm/trunk/test/Transforms/JumpThreading/unfold-selects-same-cond.ll<br>> Modified:<br>>      llvm/trunk/include/llvm/Transforms/Scalar/JumpThreading.h<br>>      llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp<br>> <br>> Modified: llvm/trunk/include/llvm/Transforms/Scalar/JumpThreading.h<br>> URL:<br>> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Scalar/JumpThreading.h?rev=286236&r1=286235&r2=286236&view=diff"><span style='font-size:10.0pt'>http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Scalar/JumpThreading.h?rev=286236&r1=286235&r2=286236&view=diff</span></a><span style='font-size:10.0pt'><br>> ==============================================================================<br>> --- llvm/trunk/include/llvm/Transforms/Scalar/JumpThreading.h<br>> (original)<br>> +++ llvm/trunk/include/llvm/Transforms/Scalar/JumpThreading.h Tue Nov<br>> 8<br>> +++ 08:53:30 2016<br>> @@ -129,6 +129,8 @@ private:<br>>                                       BasicBlock *NewBB, BasicBlock<br>> *SuccBB);<br>>     /// Check if the block has profile metadata for its outgoing<br>> edges.<br>>     bool doesBlockHaveProfileData(BasicBlock *BB);<br>> +  SelectInst *getSelectFedByPhi(PHINode *PN);  void<br>> + expandSelect(SelectInst *SI);<br>>   };<br>> <br>>   } // end namespace llvm<br>> <br>> Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp<br>> URL:<br>> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=286236&r1=286235&r2=286236&view=diff"><span style='font-size:10.0pt'>http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=286236&r1=286235&r2=286236&view=diff</span></a><span style='font-size:10.0pt'><br>> ==============================================================================<br>> --- llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp (original)<br>> +++ llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Tue Nov  8<br>> +++ 08:53:30 2016<br>> @@ -1963,61 +1963,100 @@ bool JumpThreadingPass::TryToUnfoldSelec<br>>     return false;<br>>   }<br>> <br>> -/// TryToUnfoldSelectInCurrBB - Look for PHI/Select in the same BB of<br>> <br>> the<br>> form<br>> +/// GetSelectFedByPhi - Look for PHI/Select in the same BB of the<br>> form<br>>   /// bb:<br>>   ///   %p = phi [false, %bb1], [true, %bb2], [false, %bb3], [true,<br>> %bb4],<br>> ...<br>>   ///   %s = select p, trueval, falseval<br>>   ///<br>> -/// And expand the select into a branch structure. This later enables<br>> +/// And return the select. Unfolding it into a branch structure later<br>> +enables<br>>   /// jump-threading over bb in this pass.<br>>   ///<br>> -/// Using the similar approach of SimplifyCFG::FoldCondBranchOnPHI(),<br>> unfold -/// select if the associated PHI has at least one constant.<br>> If<br>> the<br>> unfolded -/// select is not jump-threaded, it will be folded again in<br>> the<br>> later -/// optimizations.<br>> +/// Using the similar approach of SimplifyCFG::FoldCondBranchOnPHI(),<br>> +return /// select if the associated PHI has at least one constant.<br>> +SelectInst *JumpThreadingPass::getSelectFedByPhi(PHINode *PN) {<br>> +<br>> +  unsigned NumPHIValues = PN->getNumIncomingValues();  if<br>> (NumPHIValues<br>> + == 0 || !PN->hasOneUse())<br>> +    return nullptr;<br>> +<br>> +  SelectInst *SI = dyn_cast<SelectInst>(PN->user_back());<br>> +  BasicBlock *BB = PN->getParent();<br>> +  if (!SI || SI->getParent() != BB)<br>> +    return nullptr;<br>> +<br>> +  Value *Cond = SI->getCondition();<br>> +  if (!Cond || Cond != PN || !Cond->getType()->isIntegerTy(1))<br>> +    return nullptr;<br>> +<br>> +  for (unsigned i = 0; i != NumPHIValues; ++i) {<br>> +    if (PN->getIncomingBlock(i) == BB)<br>> +      return nullptr;<br>> +    if (isa<ConstantInt>(PN->getIncomingValue(i)))<br>> +      return SI;<br>> +  }<br>> +<br>> +  return nullptr;<br>> +}<br>> +<br>> +/// ExpandSelect - Expand a select into an if-then-else construct.<br>> +void JumpThreadingPass::expandSelect(SelectInst *SI) {<br>> +<br>> +  BasicBlock *BB = SI->getParent();<br>> +  TerminatorInst *Term =<br>> +      SplitBlockAndInsertIfThen(SI->getCondition(), SI, false);<br>> +  PHINode *NewPN = PHINode::Create(SI->getType(), 2, "", SI);<br>> +  NewPN->addIncoming(SI->getTrueValue(), Term->getParent());<br>> +  NewPN->addIncoming(SI->getFalseValue(), BB);<br>> +  SI->replaceAllUsesWith(NewPN);<br>> +  SI->eraseFromParent();<br>> +}<br>> +<br>> +/// TryToUnfoldSelectInCurrBB - Unfold selects that could be<br>> +jump-threaded were /// they if-then-elses. If the unfolded selects<br>> are<br>> +not jump-threaded, it will /// be folded again in the later<br>> optimizations.<br>>   bool JumpThreadingPass::TryToUnfoldSelectInCurrBB(BasicBlock *BB) {<br>> +<br>>     // If threading this would thread across a loop header, don't<br>> thread<br>> the<br>> edge.<br>>     // See the comments above FindLoopHeaders for justifications and<br>> caveats.<br>>     if (LoopHeaders.count(BB))<br>>       return false;<br>> <br>> -  // Look for a Phi/Select pair in the same basic block.  The Phi<br>> feeds<br>> the<br>> -  // condition of the Select and at least one of the incoming values<br>> is<br>> a<br>> -  // constant.<br>> -  for (BasicBlock::iterator BI = BB->begin();<br>> -       PHINode *PN = dyn_cast<PHINode>(BI); ++BI) {<br>> -    unsigned NumPHIValues = PN->getNumIncomingValues();<br>> -    if (NumPHIValues == 0 || !PN->hasOneUse())<br>> -      continue;<br>> +  bool Changed = false;<br>> +  for (auto &I : *BB) {<br>> <br>> -    SelectInst *SI = dyn_cast<SelectInst>(PN->user_back());<br>> -    if (!SI || SI->getParent() != BB)<br>> +    // Look for a Phi/Select pair in the same basic block.  The Phi<br>> feeds<br>> the<br>> +    // condition of the Select and at least one of the incoming<br>> values<br>> is a<br>> +    // constant.<br>> +    PHINode *PN;<br>> +    SelectInst *SI;<br>> +    if ((PN = dyn_cast<PHINode>(&I)) && (SI = getSelectFedByPhi(PN)))<br>> {<br>> +      expandSelect(SI);<br>> +      Changed = true;<br>>         continue;<br>> +    }<br>> <br>> -    Value *Cond = SI->getCondition();<br>> -    if (!Cond || Cond != PN || !Cond->getType()->isIntegerTy(1))<br>> -      continue;<br>> +    if (I.getType()->isIntegerTy(1)) {<br>> <br>> -    bool HasConst = false;<br>> -    for (unsigned i = 0; i != NumPHIValues; ++i) {<br>> -      if (PN->getIncomingBlock(i) == BB)<br>> -        return false;<br>> -      if (isa<ConstantInt>(PN->getIncomingValue(i)))<br>> -        HasConst = true;<br>> -    }<br>> +      SmallVector<SelectInst *, 4> Selects;<br>> <br>> -    if (HasConst) {<br>> -      // Expand the select.<br>> -      TerminatorInst *Term =<br>> -          SplitBlockAndInsertIfThen(SI->getCondition(), SI, false);<br>> -      PHINode *NewPN = PHINode::Create(SI->getType(), 2, "", SI);<br>> -      NewPN->addIncoming(SI->getTrueValue(), Term->getParent());<br>> -      NewPN->addIncoming(SI->getFalseValue(), BB);<br>> -      SI->replaceAllUsesWith(NewPN);<br>> -      SI->eraseFromParent();<br>> -      return true;<br>> +      // Look for scalar booleans used in selects as conditions. If<br>> there<br>> are<br>> +      // several selects that use the same boolean, they are<br>> candidates<br>> for<br>> jump<br>> +      // threading and therefore we should unfold them.<br>> +      for (Value *U : I.users())<br>> +        if (auto *SI = dyn_cast<SelectInst>(U))<br>> +          Selects.push_back(SI);<br>> +      if (Selects.size() <= 1)<br>> +        continue;<br>> +<br>> +      // Remove duplicates<br>> +      std::sort(Selects.begin(), Selects.end());<br>> +      auto NewEnd = std::unique(Selects.begin(), Selects.end());<br>> +<br>> +      Changed = true;<br>> +      for (auto SI = Selects.begin(); SI != NewEnd; ++SI)<br>> +        expandSelect(*SI);<br>>       }<br>>     }<br>> -<br>> -  return false;<br>> +<br>> +  return Changed;<br>>   }<br>> <br>> Added:<br>> llvm/trunk/test/Transforms/JumpThreading/unfold-selects-same-cond.ll<br>> URL:<br>> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/unfold-selects-same-cond.ll?rev=286236&view=auto"><span style='font-size:10.0pt'>http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/unfold-selects-same-cond.ll?rev=286236&view=auto</span></a><span style='font-size:10.0pt'><br>> ==============================================================================<br>> ---<br>> llvm/trunk/test/Transforms/JumpThreading/unfold-selects-same-cond.ll<br>> (added)<br>> +++<br>> llvm/trunk/test/Transforms/JumpThreading/unfold-selects-same-cond.ll<br>> +++ Tue Nov  8 08:53:30 2016<br>> @@ -0,0 +1,45 @@<br>> +; RUN: opt < %s -jump-threading -instcombine -simplifycfg  -S |<br>> +FileCheck %s<br>> +<br>> +; The three selects are jump-threaded so that instcombine can<br>> optimize,<br>> +and ; simplifycfg should turn the result into a single select.<br>> +define i32 @f(i32 %a, i32 %b) {<br>> +; CHECK: select<br>> +; CHECK-NOT: select<br>> +entry:<br>> +  %0 = and i32 %a, 1<br>> +  %1 = and i32 %b, 1<br>> +  %xor = xor i32 %1, %a<br>> +  %shr32 = lshr i32 %a, 1<br>> +  %cmp10 = icmp eq i32 %xor, 1<br>> +  %2 = xor i32 %b, 12345<br>> +  %b.addr.1 = select i1 %cmp10, i32 %2, i32 %b<br>> +  %shr1633 = lshr i32 %b.addr.1, 1<br>> +  %3 = or i32 %shr1633, 54321<br>> +  %b.addr.2 = select i1 %cmp10, i32 %3, i32 %shr1633<br>> +  %shr1634 = lshr i32 %b.addr.2, 2<br>> +  %4 = or i32 %shr1634, 54320<br>> +  %b.addr.3 = select i1 %cmp10, i32 %4, i32 %shr1634<br>> +  ret i32 %b.addr.3<br>> +}<br>> +<br>> +; Case where the condition is not only used as condition but also as<br>> +the ; true or false value in at least one of the selects.<br>> +define i1 @g(i32 %a, i32 %b) {<br>> +; CHECK: select<br>> +; CHECK-NOT: select<br>> +entry:<br>> +  %0 = and i32 %a, 1<br>> +  %1 = and i32 %b, 1<br>> +  %xor = xor i32 %1, %a<br>> +  %shr32 = lshr i32 %a, 1<br>> +  %cmp10 = icmp eq i32 %xor, 1<br>> +  %2 = xor i32 %b, 12345<br>> +  %b.addr.1 = select i1 %cmp10, i32 %2, i32 %b<br>> +  %shr1633 = lshr i32 %b.addr.1, 1<br>> +  %3 = or i32 %shr1633, 54321<br>> +  %b.addr.2 = select i1 %cmp10, i32 %3, i32 %shr1633<br>> +  %shr1634 = lshr i32 %b.addr.2, 2<br>> +  %4 = icmp eq i32 %shr1634, 54320<br>> +  %b.addr.3 = select i1 %cmp10, i1 %4, i1 %cmp10<br>> +  ret i1 %b.addr.3<br>> +}<br>> <br>> _______________________________________________<br>> llvm-commits mailing list<br>> </span><a href="mailto:llvm-commits@lists.llvm.org"><span style='font-size:10.0pt'>llvm-commits@lists.llvm.org</span></a><span style='font-size:10.0pt'><br>> </span><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits"><span style='font-size:10.0pt'>http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</span></a><span style='font-size:10.0pt'><br>>  IMPORTANT NOTICE: The contents of this email and any attachments are<br>> confidential and may also be privileged. If you are not the intended<br>> recipient, please notify the sender immediately and do not disclose<br>> the contents to any other person, use it for any purpose, or store or<br>> copy the information in any medium. Thank you.<br>> _______________________________________________<br>> llvm-commits mailing list<br>> </span><a href="mailto:llvm-commits@lists.llvm.org"><span style='font-size:10.0pt'>llvm-commits@lists.llvm.org</span></a><span style='font-size:10.0pt'><br>> </span><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits"><span style='font-size:10.0pt'>http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</span></a><span style='font-size:10.0pt'><o:p></o:p></span></p></div><p class=MsoNormal>IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you. <o:p></o:p></p></div></body></html>