[llvm] [SPARC][IAS] Implement Solaris Natural Instruction extension (PR #170794)

via llvm-commits llvm-commits at lists.llvm.org
Sat Jan 3 05:45:48 PST 2026


================
@@ -101,114 +101,168 @@ multiclass int_cond_alias<string cond, int condVal> {
   // b<cond> %icc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), " %icc, $imm"),
                   (BPICC brtarget:$imm, condVal)>, Requires<[HasV9]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), " %ncc, $imm"),
+                  (BPICC brtarget:$imm, condVal)>, Requires<[HasV9, Is32Bit]>;
 
   // b<cond>,pt %icc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",pt %icc, $imm"),
                   (BPICC brtarget:$imm, condVal)>, Requires<[HasV9]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",pt %ncc, $imm"),
+                  (BPICC brtarget:$imm, condVal)>, Requires<[HasV9, Is32Bit]>;
 
   // b<cond>,a %icc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",a %icc, $imm"),
                   (BPICCA brtarget:$imm, condVal)>, Requires<[HasV9]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",a %ncc, $imm"),
+                  (BPICCA brtarget:$imm, condVal)>, Requires<[HasV9, Is32Bit]>;
 
   // b<cond>,a,pt %icc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",a,pt %icc, $imm"),
                   (BPICCA brtarget:$imm, condVal)>, Requires<[HasV9]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",a,pt %ncc, $imm"),
+                  (BPICCA brtarget:$imm, condVal)>, Requires<[HasV9, Is32Bit]>;
 
   // b<cond>,pn %icc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",pn %icc, $imm"),
                   (BPICCNT brtarget:$imm, condVal)>, Requires<[HasV9]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",pn %ncc, $imm"),
+                  (BPICCNT brtarget:$imm, condVal)>, Requires<[HasV9, Is32Bit]>;
 
   // b<cond>,a,pn %icc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",a,pn %icc, $imm"),
                   (BPICCANT brtarget:$imm, condVal)>, Requires<[HasV9]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",a,pn %ncc, $imm"),
+                  (BPICCANT brtarget:$imm, condVal)>, Requires<[HasV9, Is32Bit]>;
 
   // b<cond> %xcc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), " %xcc, $imm"),
                   (BPXCC brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), " %ncc, $imm"),
+                  (BPXCC brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
 
   // b<cond>,pt %xcc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",pt %xcc, $imm"),
                   (BPXCC brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",pt %ncc, $imm"),
+                  (BPXCC brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
 
   // b<cond>,a %xcc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",a %xcc, $imm"),
                   (BPXCCA brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",a %ncc, $imm"),
+                  (BPXCCA brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
 
   // b<cond>,a,pt %xcc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",a,pt %xcc, $imm"),
                   (BPXCCA brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",a,pt %ncc, $imm"),
+                  (BPXCCA brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
 
   // b<cond>,pn %xcc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",pn %xcc, $imm"),
                   (BPXCCNT brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",pn %ncc, $imm"),
+                  (BPXCCNT brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
 
   // b<cond>,a,pn %xcc, $imm
   def : InstAlias<!strconcat(!strconcat("b", cond), ",a,pn %xcc, $imm"),
                   (BPXCCANT brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
-
+  def : InstAlias<!strconcat(!strconcat("b", cond), ",a,pn %ncc, $imm"),
+                  (BPXCCANT brtarget:$imm, condVal)>, Requires<[Is64Bit]>;
 
   defm : intcond_mov_alias<cond, condVal, " %icc",
                             MOVICCrr, MOVICCri,
                             FMOVS_ICC, FMOVD_ICC>, Requires<[HasV9]>;
 
+  defm : intcond_mov_alias<cond, condVal, " %ncc",
+                            MOVICCrr, MOVICCri,
+                            FMOVS_ICC, FMOVD_ICC>, Requires<[Is32Bit, HasV9]>;
+
   defm : intcond_mov_alias<cond, condVal, " %xcc",
                             MOVXCCrr, MOVXCCri,
                             FMOVS_XCC, FMOVD_XCC>, Requires<[Is64Bit]>;
 
+  defm : intcond_mov_alias<cond, condVal, " %ncc",
+                            MOVXCCrr, MOVXCCri,
+                            FMOVS_XCC, FMOVD_XCC>, Requires<[Is64Bit]>;
+
   // fmovq<cond> (%icc|%xcc), $rs2, $rd
   def : InstAlias<!strconcat(!strconcat("fmovq", cond), " %icc, $rs2, $rd"),
                   (FMOVQ_ICC QFPRegs:$rd, QFPRegs:$rs2, condVal)>,
                   Requires<[HasV9, HasHardQuad]>;
+  def : InstAlias<!strconcat(!strconcat("fmovq", cond), " %ncc, $rs2, $rd"),
----------------
koachan wrote:

My bad, I forgot about it. Added fmovq test too.

https://github.com/llvm/llvm-project/pull/170794


More information about the llvm-commits mailing list