[PATCH] D156497: [BPF] Emit UNDEF rather than constant 0

Tamir Duberstein via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 14 11:42:18 PDT 2023


tamird updated this revision to Diff 550041.
tamird added a comment.

Remove tests, rewrite commit message.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D156497/new/

https://reviews.llvm.org/D156497

Files:
  llvm/lib/Target/BPF/BPFISelLowering.cpp
  llvm/test/CodeGen/BPF/struct_ret1.ll
  llvm/test/CodeGen/BPF/struct_ret2.ll
  llvm/test/CodeGen/BPF/struct_ret3.ll


Index: llvm/test/CodeGen/BPF/struct_ret3.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/BPF/struct_ret3.ll
@@ -0,0 +1,11 @@
+; RUN: not llc -march=bpf < %s 2> %t1
+; RUN: FileCheck %s < %t1
+; CHECK: error: <unknown>:0:0: in function baz void (ptr): aggregate returns are not supported
+
+%struct.B = type { [100 x i64] }
+
+; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
+define dso_local void @baz(ptr noalias nocapture sret(%struct.B) align 8 %agg.result) local_unnamed_addr #0 {
+entry:
+  ret void
+}
Index: llvm/test/CodeGen/BPF/struct_ret2.ll
===================================================================
--- llvm/test/CodeGen/BPF/struct_ret2.ll
+++ llvm/test/CodeGen/BPF/struct_ret2.ll
@@ -1,6 +1,6 @@
 ; RUN: not llc -march=bpf < %s 2> %t1
 ; RUN: FileCheck %s < %t1
-; CHECK: only small returns
+; CHECK: only small returns are supported
 
 ; Function Attrs: nounwind uwtable
 define { i64, i32 } @foo(i32 %a, i32 %b, i32 %c) #0 {
Index: llvm/test/CodeGen/BPF/struct_ret1.ll
===================================================================
--- llvm/test/CodeGen/BPF/struct_ret1.ll
+++ llvm/test/CodeGen/BPF/struct_ret1.ll
@@ -15,13 +15,3 @@
   %.fca.1.insert = insertvalue { i64, i32 } %.fca.0.insert, i32 %retval.sroa.2.0.copyload, 1
   ret { i64, i32 } %.fca.1.insert
 }
-
-; CHECK: error: <unknown>:0:0: in function baz void (ptr): aggregate returns are not supported
-
-%struct.B = type { [100 x i64] }
-
-; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
-define dso_local void @baz(ptr noalias nocapture sret(%struct.B) align 8 %agg.result) local_unnamed_addr #0 {
-entry:
-  ret void
-}
Index: llvm/lib/Target/BPF/BPFISelLowering.cpp
===================================================================
--- llvm/lib/Target/BPF/BPFISelLowering.cpp
+++ llvm/lib/Target/BPF/BPFISelLowering.cpp
@@ -368,7 +368,7 @@
         HasMemArgs = true;
       else
         report_fatal_error("unhandled argument location");
-      InVals.push_back(DAG.getConstant(0, DL, VA.getLocVT()));
+      InVals.push_back(DAG.getUNDEF(VA.getLocVT()));
     }
   }
   if (HasMemArgs)
@@ -532,7 +532,7 @@
     return DAG.getNode(Opc, DL, MVT::Other, Chain);
   }
 
-  // Analize return values.
+  // Analyze return values.
   CCInfo.AnalyzeReturn(Outs, getHasAlu32() ? RetCC_BPF32 : RetCC_BPF64);
 
   SDValue Glue;
@@ -572,9 +572,9 @@
   CCState CCInfo(CallConv, IsVarArg, MF, RVLocs, *DAG.getContext());
 
   if (Ins.size() > 1) {
-    fail(DL, DAG, "only small returns supported");
+    fail(DL, DAG, "only small returns are supported");
     for (auto &In : Ins)
-      InVals.push_back(DAG.getConstant(0, DL, In.VT));
+      InVals.push_back(DAG.getUNDEF(In.VT));
     return DAG.getCopyFromReg(Chain, DL, 1, Ins[0].VT, InGlue).getValue(1);
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D156497.550041.patch
Type: text/x-patch
Size: 2892 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230814/b15566f7/attachment.bin>


More information about the llvm-commits mailing list