[llvm] r284917 - [ARM] Fix crash in ConstantIslands

James Molloy via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 24 10:22:44 PDT 2016


Hi Eli,

Sorry about that! I'm on vacation for a few days with no SVN access- if
it's blocking you please feel free to revert and I'll look at it on
Thursday.

Thanks,

James
On Mon, 24 Oct 2016 at 19:20, Friedman, Eli via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> On 10/22/2016 2:58 AM, James Molloy via llvm-commits wrote:
> > Author: jamesm
> > Date: Sat Oct 22 04:58:37 2016
> > New Revision: 284917
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=284917&view=rev
> > Log:
> > [ARM] Fix crash in ConstantIslands
> >
> > tPCRelJT may not be the first instruction in a block. Check that instead
> of dereferencing a broken iterator.
>
> Thanks for the fix... but this exposes more problems.
>
> It looks like the jump tables being generated by this optimization
> aren't properly aligned; with -no-integrated-as, I'm getting errors like
> "Error: invalid immediate for address calculation (value =
> 0x00000006)".  I haven't reduced a testcase yet, but it's triggering on
> a bunch of SPEC tests, so it shouldn't be hard to reproduce.
>
> -Eli
>
>
> >
> > Added:
> >      llvm/trunk/test/CodeGen/ARM/constant-island-crash.ll
> > Modified:
> >      llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
> >
> > Modified: llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp?rev=284917&r1=284916&r2=284917&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp (original)
> > +++ llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp Sat Oct 22
> 04:58:37 2016
> > @@ -2048,7 +2048,9 @@ bool ARMConstantIslands::optimizeThumb2J
> >         //   %base = tLEApcrelJT
> >         //   %t = tLDRr %idx, %base
> >         unsigned BaseReg = User.MI->getOperand(0).getReg();
> > -
> > +
> > +      if (User.MI->getIterator() == User.MI->getParent()->begin())
> > +        continue;
> >         MachineInstr *Shift = User.MI->getPrevNode();
> >         if (Shift->getOpcode() != ARM::tLSLri ||
> >             Shift->getOperand(3).getImm() != 2 ||
> >
> > Added: llvm/trunk/test/CodeGen/ARM/constant-island-crash.ll
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/constant-island-crash.ll?rev=284917&view=auto
> >
> ==============================================================================
> > --- llvm/trunk/test/CodeGen/ARM/constant-island-crash.ll (added)
> > +++ llvm/trunk/test/CodeGen/ARM/constant-island-crash.ll Sat Oct 22
> 04:58:37 2016
> > @@ -0,0 +1,43 @@
> > +; RUN: llc < %s
> > +; No FileCheck - testing for crash.
> > +
> > +target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
> > +target triple = "thumbv5e-none-linux-gnueabi"
> > +
> > +%struct.blam = type { [4 x %struct.eggs], [6 x [15 x i16]], [6 x i32],
> i32, i32, i32, i32, i32, i32, %struct.eggs, [4 x %struct.eggs], [4 x
> %struct.eggs], [4 x i32], i32, i32, i32, [4 x %struct.eggs], [4 x
> %struct.eggs], i32, %struct.eggs, i32 }
> > +%struct.eggs = type { i32, i32 }
> > +
> > +define void @spam(%struct.blam* %arg, i32 %arg1) {
> > +bb:
> > +  %tmp = getelementptr inbounds %struct.blam, %struct.blam* %arg, i32
> undef, i32 2, i32 %arg1
> > +  switch i32 %arg1, label %bb8 [
> > +    i32 0, label %bb2
> > +    i32 1, label %bb3
> > +    i32 2, label %bb4
> > +    i32 3, label %bb5
> > +    i32 4, label %bb6
> > +    i32 5, label %bb7
> > +  ]
> > +
> > +bb2:                                              ; preds = %bb
> > +  unreachable
> > +
> > +bb3:                                              ; preds = %bb
> > +  unreachable
> > +
> > +bb4:                                              ; preds = %bb
> > +  unreachable
> > +
> > +bb5:                                              ; preds = %bb
> > +  unreachable
> > +
> > +bb6:                                              ; preds = %bb
> > +  unreachable
> > +
> > +bb7:                                              ; preds = %bb
> > +  unreachable
> > +
> > +bb8:                                              ; preds = %bb
> > +  store i32 1, i32* %tmp, align 4
> > +  unreachable
> > +}
> >
> >
> > _______________________________________________
> > 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
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161024/d2de16a4/attachment.html>


More information about the llvm-commits mailing list