<div dir="ltr">Hello Krzysztof,<br><br>It looks like one or your resent commits added broken tests to one of our builders:<br><a href="http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/7938">http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/7938</a><br><br>. . .<br>    LLVM :: CodeGen/Hexagon/adjust-latency-stackST.ll<br>    LLVM :: CodeGen/Hexagon/always-ext.ll<br>    LLVM :: CodeGen/Hexagon/branchfolder-keep-impdef.ll<br>    LLVM :: CodeGen/Hexagon/convertdptoint.ll<br>    LLVM :: CodeGen/Hexagon/dadd.ll<br>    LLVM :: CodeGen/Hexagon/dmul.ll<br>    LLVM :: CodeGen/Hexagon/double.ll<br>    LLVM :: CodeGen/Hexagon/doubleconvert-ieee-rnd-near.ll<br>    LLVM :: CodeGen/Hexagon/dsub.ll<br>    LLVM :: CodeGen/Hexagon/expand-condsets-rm-segment.ll<br>    LLVM :: CodeGen/Hexagon/expand-condsets-undef.ll<br>    LLVM :: CodeGen/Hexagon/float.ll<br>    LLVM :: CodeGen/Hexagon/floatconvert-ieee-rnd-near.ll<br>    LLVM :: CodeGen/Hexagon/i16_VarArg.ll<br>    LLVM :: CodeGen/Hexagon/i1_VarArg.ll<br>    LLVM :: CodeGen/Hexagon/i8_VarArg.ll<br>    LLVM :: CodeGen/Hexagon/memcpy-likely-aligned.ll<br>    LLVM :: CodeGen/Hexagon/rdf-extra-livein.ll<br>    LLVM :: CodeGen/Hexagon/rdf-filter-defs.ll<br>    LLVM :: CodeGen/Hexagon/store-imm-stack-object.ll<br>    LLVM :: CodeGen/Hexagon/swp-epilog-reuse.ll<br>    LLVM :: CodeGen/Hexagon/tail-call-mem-intrinsics.ll<br>    LLVM :: CodeGen/Hexagon/trap-unreachable.ll<br>    LLVM :: CodeGen/Hexagon/vect/vect-fma.ll<br><br><br>The builder was already red and did not send notifications on the changes.<br>Please have a look?<br><br>Thanks<br><br>Galina<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 15, 2018 at 7:47 AM, Krzysztof Parzyszek via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: kparzysz<br>
Date: Thu Feb 15 07:47:53 2018<br>
New Revision: 325255<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=325255&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=325255&view=rev</a><br>
Log:<br>
[Hexagon] Fix lowering of formal arguments after r324737<br>
<br>
Lowering of formal arguments needs to be aware of vararg functions.<br>
<br>
Added:<br>
    llvm/trunk/test/CodeGen/<wbr>Hexagon/vararg-formal.ll<br>
Modified:<br>
    llvm/trunk/lib/Target/Hexagon/<wbr>HexagonISelLowering.cpp<br>
<br>
Modified: llvm/trunk/lib/Target/Hexagon/<wbr>HexagonISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonISelLowering.cpp?rev=325255&r1=325254&r2=325255&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>Hexagon/HexagonISelLowering.<wbr>cpp?rev=325255&r1=325254&r2=<wbr>325255&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/Hexagon/<wbr>HexagonISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/Hexagon/<wbr>HexagonISelLowering.cpp Thu Feb 15 07:47:53 2018<br>
@@ -107,14 +107,20 @@ static cl::opt<int> MaxStoresPerMemsetOp<br>
 namespace {<br>
<br>
   class HexagonCCState : public CCState {<br>
-    unsigned NumNamedVarArgParams;<br>
+    unsigned NumNamedVarArgParams = 0;<br>
<br>
   public:<br>
     HexagonCCState(CallingConv::ID CC, bool IsVarArg, MachineFunction &MF,<br>
                    SmallVectorImpl<CCValAssign> &locs, LLVMContext &C,<br>
-                   int NumNamedVarArgParams)<br>
-        : CCState(CC, IsVarArg, MF, locs, C),<br>
-          NumNamedVarArgParams(<wbr>NumNamedVarArgParams) {}<br>
+                   const Function *Callee)<br>
+        : CCState(CC, IsVarArg, MF, locs, C) {<br>
+      // If a function has zero args and is a vararg function, that's<br>
+      // disallowed so it must be an undeclared function.  Do not assume<br>
+      // varargs if the callee is undefined.<br>
+      if (Callee && Callee->isVarArg() &&<br>
+          Callee->getFunctionType()-><wbr>getNumParams() != 0)<br>
+        NumNamedVarArgParams = Callee->getFunctionType()-><wbr>getNumParams();<br>
+    }<br>
<br>
     unsigned getNumNamedVarArgParams() const { return NumNamedVarArgParams; }<br>
   };<br>
@@ -323,25 +329,17 @@ HexagonTargetLowering::<wbr>LowerCall(TargetL<br>
   MachineFrameInfo &MFI = MF.getFrameInfo();<br>
   auto PtrVT = getPointerTy(MF.getDataLayout(<wbr>));<br>
<br>
-  // Check for varargs.<br>
-  unsigned NumNamedVarArgParams = 0;<br>
-<br>
+  const Function *CalleeF = nullptr;<br>
   if (GlobalAddressSDNode *GAN = dyn_cast<GlobalAddressSDNode>(<wbr>Callee)) {<br>
     const GlobalValue *GV = GAN->getGlobal();<br>
     Callee = DAG.getTargetGlobalAddress(GV, dl, MVT::i32);<br>
-    if (const Function* F = dyn_cast<Function>(GV)) {<br>
-      // If a function has zero args and is a vararg function, that's<br>
-      // disallowed so it must be an undeclared function.  Do not assume<br>
-      // varargs if the callee is undefined.<br>
-      if (F->isVarArg() && F->getFunctionType()-><wbr>getNumParams() != 0)<br>
-        NumNamedVarArgParams = F->getFunctionType()-><wbr>getNumParams();<br>
-    }<br>
+    CalleeF = dyn_cast<Function>(GV);<br>
   }<br>
<br>
   // Analyze operands of the call, assigning locations to each operand.<br>
   SmallVector<CCValAssign, 16> ArgLocs;<br>
-  HexagonCCState CCInfo(CallConv, IsVarArg, DAG.getMachineFunction(),<br>
-                        ArgLocs, *DAG.getContext(), NumNamedVarArgParams);<br>
+  HexagonCCState CCInfo(CallConv, IsVarArg, MF, ArgLocs, *DAG.getContext(),<br>
+                        CalleeF);<br>
<br>
   if (Subtarget.useHVXOps())<br>
     CCInfo.AnalyzeCallOperands(<wbr>Outs, CC_Hexagon_HVX);<br>
@@ -698,8 +696,8 @@ SDValue HexagonTargetLowering::<wbr>LowerForm<br>
<br>
   // Assign locations to all of the incoming arguments.<br>
   SmallVector<CCValAssign, 16> ArgLocs;<br>
-  CCState CCInfo(CallConv, IsVarArg, DAG.getMachineFunction(), ArgLocs,<br>
-                 *DAG.getContext());<br>
+  HexagonCCState CCInfo(CallConv, IsVarArg, MF, ArgLocs, *DAG.getContext(),<br>
+                        &MF.getFunction());<br>
<br>
   if (Subtarget.useHVXOps())<br>
     CCInfo.AnalyzeFormalArguments(<wbr>Ins, CC_Hexagon_HVX);<br>
<br>
Added: llvm/trunk/test/CodeGen/<wbr>Hexagon/vararg-formal.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/vararg-formal.ll?rev=325255&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/Hexagon/vararg-formal.<wbr>ll?rev=325255&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>Hexagon/vararg-formal.ll (added)<br>
+++ llvm/trunk/test/CodeGen/<wbr>Hexagon/vararg-formal.ll Thu Feb 15 07:47:53 2018<br>
@@ -0,0 +1,12 @@<br>
+; RUN: llc -march=hexagon < %s | FileCheck %s<br>
+<br>
+; Make sure that the first formal argument is not loaded from memory.<br>
+; CHECK-NOT: memw<br>
+<br>
+define i32 @fred(i32 %a0, ...) #0 {<br>
+b1:<br>
+  %v2 = add i32 %a0, 1<br>
+  ret i32 %v2<br>
+}<br>
+<br>
+attributes #0 = { nounwind }<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>
</blockquote></div><br></div>