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

Galina Kistanova via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 30 16:14:24 PST 2018


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>
wrote:

> 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
>
> . . .
> 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
>
> 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> 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
>> 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.
>>
>> Differential Revision: 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
>> ============================================================
>> ==================
>> --- 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
>> ============================================================
>> ==================
>> --- 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
>> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180130/fe12da93/attachment.html>


More information about the llvm-commits mailing list