<div dir="ltr">Indeed I did :-).  It is very targeted and trivial and I believe it to be a very low-risk fix for a nasty codegen issue.<br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 21, 2017 at 4:57 PM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I think you asked on IRC for this to be merged?<br>
<div class="HOEnZb"><div class="h5"><br>
On Wed, Aug 16, 2017 at 7:42 PM, Saleem Abdulrasool via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: compnerd<br>
> Date: Wed Aug 16 19:42:24 2017<br>
> New Revision: 311061<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=311061&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=311061&view=rev</a><br>
> Log:<br>
> ARM: mark CPSR as clobbered for Windows VLAs<br>
><br>
> When lowering a VLA, we emit a __chstk call.  However, this call can<br>
> internally clobber CPSR.  We did not mark this register as an ImpDef,<br>
> which could potentially allow a comparison to be hoisted above the call<br>
> to `__chkstk`.  In such a case, the CPSR could be clobbered, and the<br>
> check invalidated.  When the support was initially added, it seemed that<br>
> the call would take care of preventing CPSR from being clobbered, but<br>
> this is not the case.  Mark the register as clobbered to fix a possible<br>
> state corruption.<br>
><br>
> Added:<br>
>     llvm/trunk/test/CodeGen/ARM/<wbr>Windows/vla-cpsr.ll<br>
> Modified:<br>
>     llvm/trunk/lib/Target/ARM/<wbr>ARMISelLowering.cpp<br>
><br>
> Modified: llvm/trunk/lib/Target/ARM/<wbr>ARMISelLowering.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=311061&r1=311060&r2=311061&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>ARM/ARMISelLowering.cpp?rev=<wbr>311061&r1=311060&r2=311061&<wbr>view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/lib/Target/ARM/<wbr>ARMISelLowering.cpp (original)<br>
> +++ llvm/trunk/lib/Target/ARM/<wbr>ARMISelLowering.cpp Wed Aug 16 19:42:24 2017<br>
> @@ -8790,6 +8790,8 @@ ARMTargetLowering::<wbr>EmitLowered__chkstk(M<br>
>          .addReg(ARM::R4, RegState::Implicit | RegState::Kill)<br>
>          .addReg(ARM::R4, RegState::Implicit | RegState::Define)<br>
>          .addReg(ARM::R12,<br>
> +                RegState::Implicit | RegState::Define | RegState::Dead)<br>
> +        .addReg(ARM::CPSR,<br>
>                  RegState::Implicit | RegState::Define | RegState::Dead);<br>
>      break;<br>
>    case CodeModel::Large: {<br>
> @@ -8804,6 +8806,8 @@ ARMTargetLowering::<wbr>EmitLowered__chkstk(M<br>
>          .addReg(ARM::R4, RegState::Implicit | RegState::Kill)<br>
>          .addReg(ARM::R4, RegState::Implicit | RegState::Define)<br>
>          .addReg(ARM::R12,<br>
> +                RegState::Implicit | RegState::Define | RegState::Dead)<br>
> +        .addReg(ARM::CPSR,<br>
>                  RegState::Implicit | RegState::Define | RegState::Dead);<br>
>      break;<br>
>    }<br>
><br>
> Added: llvm/trunk/test/CodeGen/ARM/<wbr>Windows/vla-cpsr.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/Windows/vla-cpsr.ll?rev=311061&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/ARM/Windows/vla-cpsr.<wbr>ll?rev=311061&view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/CodeGen/ARM/<wbr>Windows/vla-cpsr.ll (added)<br>
> +++ llvm/trunk/test/CodeGen/ARM/<wbr>Windows/vla-cpsr.ll Wed Aug 16 19:42:24 2017<br>
> @@ -0,0 +1,13 @@<br>
> +; RUN: llc -mtriple thumbv7-windows-itanium -filetype asm -o /dev/null %s -print-machineinstrs=expand-<wbr>isel-pseudos 2>&1 | FileCheck %s<br>
> +<br>
> +declare arm_aapcs_vfpcc void @g(i8*) local_unnamed_addr<br>
> +<br>
> +define arm_aapcs_vfpcc void @f(i32 %i) local_unnamed_addr {<br>
> +entry:<br>
> +  %vla = alloca i8, i32 %i, align 1<br>
> +  call arm_aapcs_vfpcc void @g(i8* nonnull %vla)<br>
> +  ret void<br>
> +}<br>
> +<br>
> +; CHECK: tBL pred:14, pred:%noreg, <es:__chkstk>, %LR<imp-def>, %SP<imp-use>, %R4<imp-use,kill>, %R4<imp-def>, %R12<imp-def,dead>, %CPSR<imp-def,dead><br>
> +<br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Saleem Abdulrasool<br>compnerd (at) compnerd (dot) org</div>
</div></div>