<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62954>62954</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LV] First order reccurences is incorrectly eliminated
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
fhahn
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ebrevnov
</td>
</tr>
</table>
<pre>
There is a regression caused by:
commit 02369b75fdd7b5fc5d9b47f1b60587c225918511
Author: Florian Hahn <flo@fhahn.com>
Date: Mon Apr 17 12:30:52 2023 +0100
[VPlan] Mark recurrence recipes as not having side-effects.
While I don't have a short test to share I will try to describe the problem. Here is the VPlan for the problematic case before VPlanTransforms::removeDeadRecipes() call :
<x1> vector loop: {
vector.body:
EMIT vp<%2> = CANONICAL-INDUCTION
FIRST-ORDER-RECURRENCE-PHI ir<%106> = phi ir<%.promoted>, ir<%111>
WIDEN-INDUCTION %indvars.iv = phi 4, %indvars.iv.next, ir<2>
vp<%5> = DERIVED-IV ir<4> + vp<%2> * ir<2>
vp<%6> = SCALAR-STEPS vp<%5>, ir<2>
REPLICATE ir<%107> = or vp<%6>, ir<1>
REPLICATE ir<%108> = getelementptr ir<%74>, ir<%107>
INTERLEAVE-GROUP with factor 2 at %109, ir<%108>
ir<%109> = load from index 0
WIDEN ir<%110> = fadd ir<%75>, ir<%109>
REPLICATE store ir<%110>, ir<%108>
WIDEN ir<%111> = sub ir<0>, ir<%indvars.iv>
EMIT vp<%13> = first-order splice ir<%106> ir<%111>
EMIT vp<%14> = VF * UF +(nuw) vp<%2>
EMIT branch-on-count vp<%14> vp<%0>
No successors
}
Successor(s): middle.block
middle.block:
No successors
}
As you can see there are a FIRST-ORDER-RECURRENCE-PHI recipe and "first-order splice" instruction. Both are deleted by VPlanTransforms::removeDeadRecipes() as there are no uses of "first-order splice" instruction (after the change). This is incorrect because there is an implicit use of FIRST-ORDER-RECURRENCE-PHI in fixFixedOrderRecurrence which fixes resume value for scalar epilogue.
PS: It doesn't seem to be correct to prevent deletion by marking FIRST-ORDER-RECURRENCE-PHI as side effecting...but turning implicit use to explicit doesn't seem to be easy?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVk1z4jgQ_TXi0oXLljHGBw4EzA5VGZIiJHOW5TbWjixRkkySf78lm--Zye5e-FB3v35qtfqJWSt2CnFKkgdCaVWzWhFKSbIYsNbV2kyxMHhQ-jAodPk53dZoEIQFBgZ3Bq0VWgFnrcUSik8Sz0i4IOHxk-umEQ5CGo-zIk2qskyLpOJJmRWjtIqKcZhMUk5pkkWTJIr6oFmXl8QzWEptBFPwjdUKSDyvpCajsOMYcN2QOO8jFsyh9wf4rhXM9gaiFCJK4lkckniWUKAhjYHQhzAKw2uCQJKHt2fJFEkW8J2Zn2CQt8ag4uh_ij1aYBaUdlCzg1A7sKLEIVYVcmeDa6wftZAIKyi1IjTt_BEY2FobBw6tA6fB1sx4p3chJTjz6ddKtNyIAsHVCHujC4lNAPDtWGm_2nGESptrH-YEB84sQoGVNkevrWHKVto01h9GPDPY6AMukJWbfj-ETgjNgDMp4e68SDz_iEicwwG50wak1ntfWJI-HOvVGwLfC-dYAID8-2oLhz2J54Qm1EOQeAHz2fppvZrPHoer9eJ1vl09rY8hy9XmZTt82izyzXCTz183m3w9z4fP31YgTI8SheMTzr4W5-Vgb3SjHZb--On84h5F54aAH6tFvr4kBUITocoDMzYQhzPkyMffmAKFH-6MSi-AAOfdJSdWi3yzessXw9Vb7z7qDPThrg509hVat0eADvBlPnucbYYv2_z55SbdHxht8ufH1Xy2za9qlp7YaXOT4wwR_SvE5ASxQ4cSG1Ru78zZIR3dV75LesFcrbf55jGfveXDvzZPr8_wLlwNFetaigJz0AVltxiTGwy4smQnPlKzEiqjGxCqxA8IL_7dgV_1QniKqVhZXqgnv1DP_lAO6_yNugX8ivA9gehEwLZFv3yPcOm6G6CbmxTF530IY91QmxIN2L0UHO8vym8vwi-AoxPg27JrzVf_9UDoRLXvfizcNO8RpEMoDFO8Hmo15LpVDu4gT__Cq9xrDbblHK3Vxh4nTLrof7ycDIROLKGZHzONKEuJQSE1_3k9lm7WT1PnK_CjkFj41C1wpsBiN10Ngh-_7Kvx0099YKoEL4i_lJ1QCkJZZ1ruhFYBPGhXd7AlSnSdDP6_SczsFTelobVoQVf_KT0QOmGVw14YeM3UDgnNAtjWwnr1EIprY5A7KLCT6WMuL-EKRONBhfM5fcqvxrKCSnwsxQeWT57P5iKU77XgtbeiBYO2bRAOTLbYCZblTDIDuBdS71q8kcznF3_sKwelRturpkVsvCgWCCfiTsPe4AGV60vst118QsPMTy_IX3BmtpNr6OVaqF0QBEXrwLVG-dCb7TsN-HH8_1s-yOwniZeDchqXWZyxAU6j8cTPkDCZDOoppVmURpiUMU_5OErLLKqqDEPKogTpeDQQU_8OCRM6juIkTCYBn9CkGI3StBhhOs4YGYXYMCEDKQ9NoM1uIKxtcTqmWTIaSFagtMeXmsJ36IzH15qZ-phh0e4sGYVSWGcvKE442T3xHt_8Q2fpuwr6rjLIedsd4227yE9AKRqhmMNy0Bo5rZ3bd51Ml4Qud8LVbdE9w-jSJzp-DfdG_43cEbrs6FlClx39fwIAAP__Ka4QHg">