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

Matthias Braun matze at braunis.de
Wed Feb 25 10:07:54 PST 2015


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> 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> 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
>> 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
>> 
>> 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
>> ==============================================================================
>> --- 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
>> ==============================================================================
>> --- 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
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 
> _______________________________________________
> llvm-commits mailing list
> 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/531db6f0/attachment.html>


More information about the llvm-commits mailing list