[llvm] r230355 - AArch64: Relax assert about large shift sizes.

Quentin Colombet qcolombet at apple.com
Wed Feb 25 12:00:09 PST 2015


Thanks!
Q.
> On Feb 25, 2015, at 10:07 AM, Matthias Braun <matze at braunis.de> wrote:
> 
> I added the debug messages. The discussion of the "proper" fix is stuck here: http://reviews.llvm.org/D6946 <http://reviews.llvm.org/D6946>
> 
> - Matthias
> 
>> On Feb 25, 2015, at 9:28 AM, Quentin Colombet <qcolombet at apple.com <mailto:qcolombet at apple.com>> wrote:
>> 
>> Hi Matthias,
>> 
>> I’m still not convinced that this is the right fix but I can live with it.
>> However, could you pleas add some debug line when we hit the locations that were formerly the assertions (i.e., the returns false)?
>> 
>> That way, we know while debugging that there is undefined behavior that made its way in the backend.
>> 
>> Thanks,
>> -Quentin
>> 
>>> On Feb 24, 2015, at 10:52 AM, Matthias Braun <matze at braunis.de <mailto:matze at braunis.de>> wrote:
>>> 
>>> Author: matze
>>> Date: Tue Feb 24 12:52:04 2015
>>> New Revision: 230355
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=230355&view=rev <http://llvm.org/viewvc/llvm-project?rev=230355&view=rev>
>>> Log:
>>> AArch64: Relax assert about large shift sizes.
>>> 
>>> The reason why these large shift sizes happen is because OpaqueConstants
>>> currently inhibit alot of DAG combining, but that has to be addressed in
>>> another commit (like the proposal in D6946).
>>> 
>>> Differential Revision: http://reviews.llvm.org/D6940 <http://reviews.llvm.org/D6940>
>>> 
>>> Added:
>>>   llvm/trunk/test/CodeGen/AArch64/large_shift.ll
>>> Modified:
>>>   llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
>>> 
>>> Modified: llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp?rev=230355&r1=230354&r2=230355&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp?rev=230355&r1=230354&r2=230355&view=diff>
>>> ==============================================================================
>>> --- llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp (original)
>>> +++ llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp Tue Feb 24 12:52:04 2015
>>> @@ -1397,8 +1397,10 @@ static bool isBitfieldExtractOpFromAnd(S
>>>  } else
>>>    return false;
>>> 
>>> -  assert((BiggerPattern || (Srl_imm > 0 && Srl_imm < VT.getSizeInBits())) &&
>>> -         "bad amount in shift node!");
>>> +  // Bail out on large immediates. This happens when no proper
>>> +  // combining/constant folding was performed.
>>> +  if (!BiggerPattern && (Srl_imm <= 0 || Srl_imm >= VT.getSizeInBits()))
>>> +    return false;
>>> 
>>>  LSB = Srl_imm;
>>>  MSB = Srl_imm + (VT == MVT::i32 ? countTrailingOnes<uint32_t>(And_imm)
>>> @@ -1502,7 +1504,11 @@ static bool isBitfieldExtractOpFromShr(S
>>>  } else
>>>    return false;
>>> 
>>> -  assert(Shl_imm < VT.getSizeInBits() && "bad amount in shift node!");
>>> +  // Missing combines/constant folding may have left us with strange
>>> +  // constants.
>>> +  if (Shl_imm >= VT.getSizeInBits())
>>> +    return false;
>>> +
>>>  uint64_t Srl_imm = 0;
>>>  if (!isIntImmediate(N->getOperand(1), Srl_imm))
>>>    return false;
>>> 
>>> Added: llvm/trunk/test/CodeGen/AArch64/large_shift.ll
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/large_shift.ll?rev=230355&view=auto <http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/large_shift.ll?rev=230355&view=auto>
>>> ==============================================================================
>>> --- llvm/trunk/test/CodeGen/AArch64/large_shift.ll (added)
>>> +++ llvm/trunk/test/CodeGen/AArch64/large_shift.ll Tue Feb 24 12:52:04 2015
>>> @@ -0,0 +1,21 @@
>>> +; RUN: llc -march=aarch64 -o - %s
>>> +target triple = "arm64-unknown-unknown"
>>> +
>>> +; Make sure we don't run into an assert in the aarch64 code selection when
>>> +; DAGCombining fails.
>>> +
>>> +declare void @t()
>>> +
>>> +define void @foo() {
>>> +  %c = bitcast i64 270458 to i64
>>> +  %t0 = lshr i64 %c, 422383
>>> +  %t1 = trunc i64 %t0 to i1
>>> +  br i1 %t1, label %BB1, label %BB0
>>> +
>>> +BB0:
>>> +  call void @t()
>>> +  br label %BB1
>>> +
>>> +BB1:
>>> +  ret void
>>> +}
>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150225/679c44fc/attachment.html>


More information about the llvm-commits mailing list