[llvm] r207943 - CodeGen: correct memset emittance for WoA

Saleem Abdulrasool compnerd at compnerd.org
Sun May 4 16:13:21 PDT 2014


Author: compnerd
Date: Sun May  4 18:13:21 2014
New Revision: 207943

URL: http://llvm.org/viewvc/llvm-project?rev=207943&view=rev
Log:
CodeGen: correct memset emittance for WoA

Windows on ARM does not conform to AEABI.  However, memset would be emitted
using the AEABI signature, resulting in inverted parameters.  Handle this
special case appropriately.

Added:
    llvm/trunk/test/CodeGen/ARM/Windows/memset.ll
Modified:
    llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp

Modified: llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp?rev=207943&r1=207942&r2=207943&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMSelectionDAGInfo.cpp Sun May  4 18:13:21 2014
@@ -151,7 +151,8 @@ EmitTargetCodeForMemset(SelectionDAG &DA
                         unsigned Align, bool isVolatile,
                         MachinePointerInfo DstPtrInfo) const {
   // Use default for non-AAPCS (or MachO) subtargets
-  if (!Subtarget->isAAPCS_ABI() || Subtarget->isTargetMachO())
+  if (!Subtarget->isAAPCS_ABI() || Subtarget->isTargetMachO() ||
+      Subtarget->isTargetWindows())
     return SDValue();
 
   const ARMTargetLowering &TLI =

Added: llvm/trunk/test/CodeGen/ARM/Windows/memset.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/Windows/memset.ll?rev=207943&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/Windows/memset.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/Windows/memset.ll Sun May  4 18:13:21 2014
@@ -0,0 +1,18 @@
+; RUN: llc -mtriple thumbv7--windows-itanium -filetype asm -o - %s | FileCheck %s
+
+ at source = common global [512 x i8] zeroinitializer, align 4
+
+declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind
+
+define void @function() {
+entry:
+  call void @llvm.memset.p0i8.i32(i8* bitcast ([512 x i8]* @source to i8*), i8 0, i32 512, i32 0, i1 false)
+  unreachable
+}
+
+; CHECK: movs r1, #0
+; CHECK: mov.w r2, #512
+; CHECK: movw r0, :lower16:source
+; CHECK: movt r0, :upper16:source
+; CHECK: memset
+





More information about the llvm-commits mailing list