[llvm] r323559 - [LivePhysRegs] Preserve pristine regs in blocks with no successors.

Friedman, Eli via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 30 16:43:04 PST 2018


Reverted in r323841.

-Eli

On 1/30/2018 4:14 PM, Galina Kistanova wrote:
> Please do to revert it till the fix gets approved.
> It is not good to keep the bot red for too long. This hides new 
> problem which later hard to track down.
>
> Thanks
>
> Galina
>
> On Tue, Jan 30, 2018 at 11:51 AM, Friedman, Eli 
> <efriedma at codeaurora.org <mailto:efriedma at codeaurora.org>> wrote:
>
>     https://reviews.llvm.org/D42655 <https://reviews.llvm.org/D42655>
>     is up for review.
>
>     I was hoping the fix would be reviewed quickly, but I can revert
>     in the meantime if it's blocking you.
>
>     -Eli
>
>
>     On 1/30/2018 10:55 AM, Galina Kistanova wrote:
>>     Hello Eli,
>>
>>     This commit broke the test LLVM :: CodeGen/ARM/pr25838.ll on one
>>     of our builders:
>>     r323559
>>     http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/7546
>>     <http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/7546>
>>
>>     . . .
>>     Failing Tests (2):
>>         LLVM :: CodeGen/ARM/pr25838.ll
>>         LLVM :: DebugInfo/Generic/string-offsets-multiple-cus.ll
>>
>>     Previous revision:
>>     http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/7610
>>     <http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/7610>
>>
>>     Please have a look?
>>
>>     Thanks
>>
>>     Galina
>>
>>
>>     On Fri, Jan 26, 2018 at 12:23 PM, Eli Friedman via llvm-commits
>>     <llvm-commits at lists.llvm.org
>>     <mailto:llvm-commits at lists.llvm.org>> wrote:
>>
>>         Author: efriedma
>>         Date: Fri Jan 26 12:23:00 2018
>>         New Revision: 323559
>>
>>         URL: http://llvm.org/viewvc/llvm-project?rev=323559&view=rev
>>         <http://llvm.org/viewvc/llvm-project?rev=323559&view=rev>
>>         Log:
>>         [LivePhysRegs] Preserve pristine regs in blocks with no
>>         successors.
>>
>>         One common source of blocks with no successors is calls to
>>         noreturn
>>         functions; we want to preserve pristine registers in case
>>         they throw an
>>         exception.
>>
>>         The whole pristine register thing is messy (we should really
>>         prefer to
>>         explicitly model registers), but this fills a hole in the
>>         model for now.
>>
>>         Fixes https://bugs.llvm.org/show_bug.cgi?id=36073
>>         <https://bugs.llvm.org/show_bug.cgi?id=36073>.
>>
>>         Differential Revision: https://reviews.llvm.org/D42509
>>         <https://reviews.llvm.org/D42509>
>>
>>
>>         Added:
>>             llvm/trunk/test/CodeGen/Thumb/stm-scavenging.ll
>>         Modified:
>>             llvm/trunk/lib/CodeGen/LivePhysRegs.cpp
>>
>>         Modified: llvm/trunk/lib/CodeGen/LivePhysRegs.cpp
>>         URL:
>>         http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LivePhysRegs.cpp?rev=323559&r1=323558&r2=323559&view=diff
>>         <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LivePhysRegs.cpp?rev=323559&r1=323558&r2=323559&view=diff>
>>         ==============================================================================
>>         --- llvm/trunk/lib/CodeGen/LivePhysRegs.cpp (original)
>>         +++ llvm/trunk/lib/CodeGen/LivePhysRegs.cpp Fri Jan 26
>>         12:23:00 2018
>>         @@ -225,10 +225,10 @@ void LivePhysRegs::addLiveOutsNoPristine
>>
>>          void LivePhysRegs::addLiveOuts(const MachineBasicBlock &MBB) {
>>            const MachineFunction &MF = *MBB.getParent();
>>         -  if (!MBB.succ_empty()) {
>>         +  if (!MBB.isReturnBlock()) {
>>              addPristines(MF);
>>              addLiveOutsNoPristines(MBB);
>>         -  } else if (MBB.isReturnBlock()) {
>>         +  } else {
>>              // For the return block: Add all callee saved registers.
>>              const MachineFrameInfo &MFI = MF.getFrameInfo();
>>              if (MFI.isCalleeSavedInfoValid())
>>
>>         Added: llvm/trunk/test/CodeGen/Thumb/stm-scavenging.ll
>>         URL:
>>         http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb/stm-scavenging.ll?rev=323559&view=auto
>>         <http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb/stm-scavenging.ll?rev=323559&view=auto>
>>         ==============================================================================
>>         --- llvm/trunk/test/CodeGen/Thumb/stm-scavenging.ll (added)
>>         +++ llvm/trunk/test/CodeGen/Thumb/stm-scavenging.ll Fri Jan
>>         26 12:23:00 2018
>>         @@ -0,0 +1,47 @@
>>         +; RUN: llc < %s | FileCheck %s
>>         +target triple = "thumbv6---gnueabi"
>>         +
>>         +; Use STM to save the three registers
>>         +; CHECK-LABEL: use_stm:
>>         +; CHECK: .save   {r7, lr}
>>         +; CHECK: .setfp  r7, sp
>>         +; CHECK: stm r3!, {r0, r1, r2}
>>         +; CHECK: bl throws_1
>>         +define void @use_stm(i32 %a, i32 %b, i32 %c, i32* %d)
>>         local_unnamed_addr noreturn "no-frame-pointer-elim"="true" {
>>         +entry:
>>         +  %arrayidx = getelementptr inbounds i32, i32* %d, i32 2
>>         +  store i32 %a, i32* %arrayidx, align 4
>>         +  %arrayidx1 = getelementptr inbounds i32, i32* %d, i32 3
>>         +  store i32 %b, i32* %arrayidx1, align 4
>>         +  %arrayidx2 = getelementptr inbounds i32, i32* %d, i32 4
>>         +  store i32 %c, i32* %arrayidx2, align 4
>>         +  tail call void @throws_1(i32 %a, i32 %b, i32 %c) noreturn
>>         +  unreachable
>>         +}
>>         +
>>         +; Don't use STM: there is no available register to store
>>         +; the address. We could transform this with some extra math, but
>>         +; that currently isn't implemented.
>>         +; CHECK-LABEL: no_stm:
>>         +; CHECK: .save   {r7, lr}
>>         +; CHECK: .setfp  r7, sp
>>         +; CHECK: str r0,
>>         +; CHECK: str r1,
>>         +; CHECK: str r2,
>>         +; CHECK: bl throws_2
>>         +define void @no_stm(i32 %a, i32 %b, i32 %c, i32* %d)
>>         local_unnamed_addr noreturn "no-frame-pointer-elim"="true" {
>>         +entry:
>>         +  %arrayidx = getelementptr inbounds i32, i32* %d, i32 2
>>         +  store i32 %a, i32* %arrayidx, align 4
>>         +  %arrayidx1 = getelementptr inbounds i32, i32* %d, i32 3
>>         +  store i32 %b, i32* %arrayidx1, align 4
>>         +  %arrayidx2 = getelementptr inbounds i32, i32* %d, i32 4
>>         +  store i32 %c, i32* %arrayidx2, align 4
>>         +  tail call void @throws_2(i32 %a, i32 %b, i32 %c, i32* %d)
>>         noreturn
>>         +  unreachable
>>         +}
>>         +
>>         +
>>         +declare void @throws_1(i32, i32, i32) noreturn
>>         +declare void @throws_2(i32, i32, i32, i32*) noreturn
>>         +
>>
>>
>>         _______________________________________________
>>         llvm-commits mailing list
>>         llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>>         http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>         <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
>>
>>
>
>     -- 
>     Employee of Qualcomm Innovation Center, Inc.
>     Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>
>

-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180130/3c52e2d6/attachment.html>


More information about the llvm-commits mailing list