[clang] Clang/MIPS: Add +fp64 if MSA and no explicit -mfp option (PR #91949)

2024-05-20 Thread YunQiang Su via cfe-commits

https://github.com/wzssyqa closed 
https://github.com/llvm/llvm-project/pull/91949
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Clang/MIPS: Add +fp64 if MSA and no explicit -mfp option (PR #91949)

2024-05-14 Thread YunQiang Su via cfe-commits

https://github.com/wzssyqa updated 
https://github.com/llvm/llvm-project/pull/91949

>From effc1a239718ebc20ac835e59223c78d3fd9a01c Mon Sep 17 00:00:00 2001
From: YunQiang Su 
Date: Mon, 13 May 2024 19:28:25 +0800
Subject: [PATCH 1/2] Clang/MIPS: Add +fp64 if MSA and no explicit -mfp option

MSA requires -mfp64. If FP64 is supported by CPU (mips32r2+),
and no -mfp32/-mfpxx is explicitly given, let's add +fp64.
Otherwise some cmd like
   clang --target=mips -mips32r5 -mmsa
will issue LLVM backend ICE.
---
 clang/lib/Driver/ToolChains/Arch/Mips.cpp | 10 ++
 clang/test/Driver/mips-features.c |  6 ++
 2 files changed, 16 insertions(+)

diff --git a/clang/lib/Driver/ToolChains/Arch/Mips.cpp 
b/clang/lib/Driver/ToolChains/Arch/Mips.cpp
index 74a8874a3ea2b..79a00711e6f53 100644
--- a/clang/lib/Driver/ToolChains/Arch/Mips.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/Mips.cpp
@@ -369,6 +369,9 @@ void mips::getMIPSTargetFeatures(const Driver , const 
llvm::Triple ,
   } else if (mips::isFP64ADefault(Triple, CPUName)) {
 Features.push_back("+fp64");
 Features.push_back("+nooddspreg");
+  } else if (Arg *A = Args.getLastArg(options::OPT_mmsa)) {
+if (A->getOption().matches(options::OPT_mmsa))
+  Features.push_back("+fp64");
   }
 
   AddTargetFeature(Args, Features, options::OPT_mno_odd_spreg,
@@ -499,6 +502,13 @@ bool mips::shouldUseFPXX(const ArgList , const 
llvm::Triple ,
options::OPT_mdouble_float))
 if (A->getOption().matches(options::OPT_msingle_float))
   UseFPXX = false;
+  // FP64 should be used for MSA.
+  if (Arg *A = Args.getLastArg(options::OPT_mmsa))
+if (A->getOption().matches(options::OPT_mmsa))
+  UseFPXX = llvm::StringSwitch(CPUName)
+.Cases("mips32r2", "mips32r3", "mips32r5", false)
+.Cases("mips64r2", "mips64r3", "mips64r5", false)
+.Default(UseFPXX);
 
   return UseFPXX;
 }
diff --git a/clang/test/Driver/mips-features.c 
b/clang/test/Driver/mips-features.c
index 5e92dccaa02ab..8b8db4c4a341b 100644
--- a/clang/test/Driver/mips-features.c
+++ b/clang/test/Driver/mips-features.c
@@ -163,6 +163,12 @@
 // RUN:   | FileCheck --check-prefix=CHECK-NOMMSA %s
 // CHECK-NOMMSA: "-target-feature" "-msa"
 //
+// -mmsa
+// RUN: %clang -target mips-linux-gnu -### -c %s \
+// RUN: -mmsa 2>&1 \
+// RUN:   | FileCheck --check-prefix=CHECK-MMSA-MFP64 %s
+// CHECK-MMSA-MFP64: "-target-feature" "+msa" "-target-feature" "+fp64"
+//
 // -mmt
 // RUN: %clang -target mips-linux-gnu -### -c %s \
 // RUN: -mno-mt -mmt 2>&1 \

>From cd7eabcd2ead397253eddf878ebf832220a221a4 Mon Sep 17 00:00:00 2001
From: YunQiang Su 
Date: Tue, 14 May 2024 21:09:57 +0800
Subject: [PATCH 2/2] Remove -mfp64 from ../clang/test/Driver/mips-as.c

-mmsa implies -mfp64 by Gas
---
 clang/test/Driver/mips-as.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/Driver/mips-as.c b/clang/test/Driver/mips-as.c
index 14fbb18c93500..a3399f1078fcd 100644
--- a/clang/test/Driver/mips-as.c
+++ b/clang/test/Driver/mips-as.c
@@ -266,7 +266,7 @@
 // RUN: %clang -target mips-linux-gnu -mno-msa -mmsa -### \
 // RUN:   -no-integrated-as -fno-pic -c %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=MIPS-MSA %s
-// MIPS-MSA: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" 
"-call_nonpic" "-EB" "-mfpxx" "-mmsa"
+// MIPS-MSA: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" 
"-call_nonpic" "-EB" "-mmsa"
 //
 // RUN: %clang -target mips-linux-gnu -mmsa -mno-msa -### \
 // RUN:   -no-integrated-as -fno-pic -c %s 2>&1 \

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Clang/MIPS: Add +fp64 if MSA and no explicit -mfp option (PR #91949)

2024-05-13 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang

Author: YunQiang Su (wzssyqa)


Changes

MSA requires -mfp64. If FP64 is supported by CPU (mips32r2+), and no 
-mfp32/-mfpxx is explicitly given, let's add +fp64. Otherwise some cmd like
   clang --target=mips -mips32r5 -mmsa
will issue LLVM backend ICE.

---
Full diff: https://github.com/llvm/llvm-project/pull/91949.diff


2 Files Affected:

- (modified) clang/lib/Driver/ToolChains/Arch/Mips.cpp (+10) 
- (modified) clang/test/Driver/mips-features.c (+6) 


``diff
diff --git a/clang/lib/Driver/ToolChains/Arch/Mips.cpp 
b/clang/lib/Driver/ToolChains/Arch/Mips.cpp
index 74a8874a3ea2b..79a00711e6f53 100644
--- a/clang/lib/Driver/ToolChains/Arch/Mips.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/Mips.cpp
@@ -369,6 +369,9 @@ void mips::getMIPSTargetFeatures(const Driver , const 
llvm::Triple ,
   } else if (mips::isFP64ADefault(Triple, CPUName)) {
 Features.push_back("+fp64");
 Features.push_back("+nooddspreg");
+  } else if (Arg *A = Args.getLastArg(options::OPT_mmsa)) {
+if (A->getOption().matches(options::OPT_mmsa))
+  Features.push_back("+fp64");
   }
 
   AddTargetFeature(Args, Features, options::OPT_mno_odd_spreg,
@@ -499,6 +502,13 @@ bool mips::shouldUseFPXX(const ArgList , const 
llvm::Triple ,
options::OPT_mdouble_float))
 if (A->getOption().matches(options::OPT_msingle_float))
   UseFPXX = false;
+  // FP64 should be used for MSA.
+  if (Arg *A = Args.getLastArg(options::OPT_mmsa))
+if (A->getOption().matches(options::OPT_mmsa))
+  UseFPXX = llvm::StringSwitch(CPUName)
+.Cases("mips32r2", "mips32r3", "mips32r5", false)
+.Cases("mips64r2", "mips64r3", "mips64r5", false)
+.Default(UseFPXX);
 
   return UseFPXX;
 }
diff --git a/clang/test/Driver/mips-features.c 
b/clang/test/Driver/mips-features.c
index 5e92dccaa02ab..8b8db4c4a341b 100644
--- a/clang/test/Driver/mips-features.c
+++ b/clang/test/Driver/mips-features.c
@@ -163,6 +163,12 @@
 // RUN:   | FileCheck --check-prefix=CHECK-NOMMSA %s
 // CHECK-NOMMSA: "-target-feature" "-msa"
 //
+// -mmsa
+// RUN: %clang -target mips-linux-gnu -### -c %s \
+// RUN: -mmsa 2>&1 \
+// RUN:   | FileCheck --check-prefix=CHECK-MMSA-MFP64 %s
+// CHECK-MMSA-MFP64: "-target-feature" "+msa" "-target-feature" "+fp64"
+//
 // -mmt
 // RUN: %clang -target mips-linux-gnu -### -c %s \
 // RUN: -mno-mt -mmt 2>&1 \

``




https://github.com/llvm/llvm-project/pull/91949
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Clang/MIPS: Add +fp64 if MSA and no explicit -mfp option (PR #91949)

2024-05-13 Thread YunQiang Su via cfe-commits

https://github.com/wzssyqa created 
https://github.com/llvm/llvm-project/pull/91949

MSA requires -mfp64. If FP64 is supported by CPU (mips32r2+), and no 
-mfp32/-mfpxx is explicitly given, let's add +fp64. Otherwise some cmd like
   clang --target=mips -mips32r5 -mmsa
will issue LLVM backend ICE.

>From effc1a239718ebc20ac835e59223c78d3fd9a01c Mon Sep 17 00:00:00 2001
From: YunQiang Su 
Date: Mon, 13 May 2024 19:28:25 +0800
Subject: [PATCH] Clang/MIPS: Add +fp64 if MSA and no explicit -mfp option

MSA requires -mfp64. If FP64 is supported by CPU (mips32r2+),
and no -mfp32/-mfpxx is explicitly given, let's add +fp64.
Otherwise some cmd like
   clang --target=mips -mips32r5 -mmsa
will issue LLVM backend ICE.
---
 clang/lib/Driver/ToolChains/Arch/Mips.cpp | 10 ++
 clang/test/Driver/mips-features.c |  6 ++
 2 files changed, 16 insertions(+)

diff --git a/clang/lib/Driver/ToolChains/Arch/Mips.cpp 
b/clang/lib/Driver/ToolChains/Arch/Mips.cpp
index 74a8874a3ea2b..79a00711e6f53 100644
--- a/clang/lib/Driver/ToolChains/Arch/Mips.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/Mips.cpp
@@ -369,6 +369,9 @@ void mips::getMIPSTargetFeatures(const Driver , const 
llvm::Triple ,
   } else if (mips::isFP64ADefault(Triple, CPUName)) {
 Features.push_back("+fp64");
 Features.push_back("+nooddspreg");
+  } else if (Arg *A = Args.getLastArg(options::OPT_mmsa)) {
+if (A->getOption().matches(options::OPT_mmsa))
+  Features.push_back("+fp64");
   }
 
   AddTargetFeature(Args, Features, options::OPT_mno_odd_spreg,
@@ -499,6 +502,13 @@ bool mips::shouldUseFPXX(const ArgList , const 
llvm::Triple ,
options::OPT_mdouble_float))
 if (A->getOption().matches(options::OPT_msingle_float))
   UseFPXX = false;
+  // FP64 should be used for MSA.
+  if (Arg *A = Args.getLastArg(options::OPT_mmsa))
+if (A->getOption().matches(options::OPT_mmsa))
+  UseFPXX = llvm::StringSwitch(CPUName)
+.Cases("mips32r2", "mips32r3", "mips32r5", false)
+.Cases("mips64r2", "mips64r3", "mips64r5", false)
+.Default(UseFPXX);
 
   return UseFPXX;
 }
diff --git a/clang/test/Driver/mips-features.c 
b/clang/test/Driver/mips-features.c
index 5e92dccaa02ab..8b8db4c4a341b 100644
--- a/clang/test/Driver/mips-features.c
+++ b/clang/test/Driver/mips-features.c
@@ -163,6 +163,12 @@
 // RUN:   | FileCheck --check-prefix=CHECK-NOMMSA %s
 // CHECK-NOMMSA: "-target-feature" "-msa"
 //
+// -mmsa
+// RUN: %clang -target mips-linux-gnu -### -c %s \
+// RUN: -mmsa 2>&1 \
+// RUN:   | FileCheck --check-prefix=CHECK-MMSA-MFP64 %s
+// CHECK-MMSA-MFP64: "-target-feature" "+msa" "-target-feature" "+fp64"
+//
 // -mmt
 // RUN: %clang -target mips-linux-gnu -### -c %s \
 // RUN: -mno-mt -mmt 2>&1 \

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits