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

Amara Emerson via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 21 15:45:15 PDT 2018


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