[llvm] r284917 - [ARM] Fix crash in ConstantIslands
Friedman, Eli via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 24 10:31:14 PDT 2016
r284993.
-Eli
On 10/24/2016 10:22 AM, James Molloy wrote:
> 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 <mailto: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 <mailto: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 <mailto: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/20161024/d91b059c/attachment.html>
More information about the llvm-commits
mailing list