[llvm] r339674 - [GlobalISel][IRTranslator] Fix a bug in handling repeating struct types during argument lowering.

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 21 16:03:44 PDT 2018


Sure, merged in r340358.

On Tue, Aug 21, 2018 at 3:45 PM, Amara Emerson <aemerson at apple.com> wrote:
> Hi Hans,
>
> This is a low risk bug fix, can we have this merged for the release?
>
> Thanks,
> Amara
>
>> On Aug 14, 2018, at 1:04 PM, Amara Emerson via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>
>> Author: aemerson
>> Date: Tue Aug 14 05:04:25 2018
>> New Revision: 339674
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=339674&view=rev
>> Log:
>> [GlobalISel][IRTranslator] Fix a bug in handling repeating struct types during argument lowering.
>>
>> Differential Revision: https://reviews.llvm.org/D49442
>>
>> Added:
>>    llvm/trunk/test/CodeGen/AArch64/GlobalISel/irtranslator-duplicate-types-param.ll
>> Modified:
>>    llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h
>>    llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp
>>
>> Modified: llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h?rev=339674&r1=339673&r2=339674&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h (original)
>> +++ llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h Tue Aug 14 05:04:25 2018
>> @@ -232,6 +232,7 @@ private:
>>
>>   /// Returns true if the value should be split into multiple LLTs.
>>   /// If \p Offsets is given then the split type's offsets will be stored in it.
>> +  /// If \p Offsets is not empty it will be cleared first.
>>   bool valueIsSplit(const Value &V,
>>                     SmallVectorImpl<uint64_t> *Offsets = nullptr);
>>
>>
>> Modified: llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp?rev=339674&r1=339673&r2=339674&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp Tue Aug 14 05:04:25 2018
>> @@ -1457,6 +1457,8 @@ void IRTranslator::finishPendingPhis() {
>> bool IRTranslator::valueIsSplit(const Value &V,
>>                                 SmallVectorImpl<uint64_t> *Offsets) {
>>   SmallVector<LLT, 4> SplitTys;
>> +  if (Offsets && !Offsets->empty())
>> +    Offsets->clear();
>>   computeValueLLTs(*DL, *V.getType(), SplitTys, Offsets);
>>   return SplitTys.size() > 1;
>> }
>>
>> Added: llvm/trunk/test/CodeGen/AArch64/GlobalISel/irtranslator-duplicate-types-param.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/irtranslator-duplicate-types-param.ll?rev=339674&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/AArch64/GlobalISel/irtranslator-duplicate-types-param.ll (added)
>> +++ llvm/trunk/test/CodeGen/AArch64/GlobalISel/irtranslator-duplicate-types-param.ll Tue Aug 14 05:04:25 2018
>> @@ -0,0 +1,15 @@
>> +; RUN: llc -O0 -o - -verify-machineinstrs %s | FileCheck %s
>> +target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
>> +target triple = "aarch64-unknown-linux-gnu"
>> +
>> +; Check we don't crash due to encountering the same struct param type twice.
>> +; CHECK-LABEL: param_two_struct
>> +; CHECK: add
>> +; CHECK: ret
>> +define i64 @param_two_struct([2 x i64] %t.coerce, [2 x i64] %s.coerce) {
>> +entry:
>> +  %t.coerce.fca.0.extract = extractvalue [2 x i64] %t.coerce, 0
>> +  %s.coerce.fca.1.extract = extractvalue [2 x i64] %s.coerce, 1
>> +  %add = add nsw i64 %s.coerce.fca.1.extract, %t.coerce.fca.0.extract
>> +  ret i64 %add
>> +}
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>


More information about the llvm-commits mailing list