[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