https://github.com/syzaara updated 
https://github.com/llvm/llvm-project/pull/100450

>From eac208b559feb3ccdfbd1d2ee6bcdd20db32f6a7 Mon Sep 17 00:00:00 2001
From: Zaara Syeda <syza...@cpap8104.rtp.raleigh.ibm.com>
Date: Wed, 24 Jul 2024 14:58:53 -0400
Subject: [PATCH 1/5] [PPC] Disable vsx and altivec when -msoft-float is used

---
 clang/lib/Basic/Targets/PPC.cpp    |  5 +++++
 clang/test/Driver/ppc-soft-float.c | 13 +++++++++++++
 2 files changed, 18 insertions(+)
 create mode 100644 clang/test/Driver/ppc-soft-float.c

diff --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp
index 9ff54083c923b..2b25cb189279a 100644
--- a/clang/lib/Basic/Targets/PPC.cpp
+++ b/clang/lib/Basic/Targets/PPC.cpp
@@ -690,6 +690,11 @@ bool PPCTargetInfo::initFeatureMap(
     return false;
   }
 
+  if (llvm::is_contained(FeaturesVec, "-hard-float")) {
+    Features["altivec"] = false;
+    Features["vsx"] = false;
+  }
+
   return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);
 }
 
diff --git a/clang/test/Driver/ppc-soft-float.c 
b/clang/test/Driver/ppc-soft-float.c
new file mode 100644
index 0000000000000..7b9205662ffeb
--- /dev/null
+++ b/clang/test/Driver/ppc-soft-float.c
@@ -0,0 +1,13 @@
+// RUN: %clang -target powerpc64-unknown-unknown -mcpu=pwr10 -msoft-float -S 
-emit-llvm %s -o - | FileCheck %s -check-prefix=CHECKSOFT
+// RUN: %clang -target powerpc64-unknown-unknown -mcpu=pwr10 -S -emit-llvm %s 
-o - | FileCheck %s -check-prefix=CHECKNOSOFT
+
+int main () {
+  return 0;
+}
+
+// CHECKSOFT-DAG: -hard-float
+// CHECKSOFT-DAG: -vsx
+// CHECKSOFT-DAG: -altivec
+
+// CHECKNOSOFT-DAG: +vsx
+// CHECKNOSOFT-DAG: +altivec

>From 6f1f08ef804fb4730c1a406afcdfd5494c79faea Mon Sep 17 00:00:00 2001
From: Zaara Syeda <syza...@cpap8104.rtp.raleigh.ibm.com>
Date: Mon, 29 Jul 2024 13:50:52 -0400
Subject: [PATCH 2/5] Address review comments

---
 clang/lib/Basic/Targets/PPC.cpp             | 68 +++++++++++++--------
 clang/test/Driver/ppc-dependent-options.cpp | 35 ++++++++++-
 clang/test/Driver/ppc-soft-float.c          | 13 ++++
 3 files changed, 87 insertions(+), 29 deletions(-)

diff --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp
index 2b25cb189279a..3b3aec4c414eb 100644
--- a/clang/lib/Basic/Targets/PPC.cpp
+++ b/clang/lib/Basic/Targets/PPC.cpp
@@ -465,21 +465,35 @@ void PPCTargetInfo::getTargetDefines(const LangOptions 
&Opts,
 // set of options.
 static bool ppcUserFeaturesCheck(DiagnosticsEngine &Diags,
                                  const std::vector<std::string> &FeaturesVec) {
-  // Cannot allow soft-float with Altivec.
-  if (llvm::is_contained(FeaturesVec, "-hard-float") &&
-      llvm::is_contained(FeaturesVec, "+altivec")) {
-    Diags.Report(diag::err_opt_not_valid_with_opt) << "-msoft-float"
-                                                   << "-maltivec";
+  auto FindVSXSubfeature = [&](StringRef Feature, StringRef SubOption,
+                               StringRef Option) {
+    if (llvm::is_contained(FeaturesVec, Feature)) {
+      Diags.Report(diag::err_opt_not_valid_with_opt) << SubOption << Option;
+      return true;
+    }
     return false;
-  }
+  };
 
-  // Cannot allow soft-float with VSX.
-  if (llvm::is_contained(FeaturesVec, "-hard-float") &&
-      llvm::is_contained(FeaturesVec, "+vsx")) {
-    Diags.Report(diag::err_opt_not_valid_with_opt) << "-msoft-float"
-                                                   << "-mvsx";
-    return false;
+  // Cannot allow soft-float with VSX, Altivec, or any
+  // VSX subfeatures.
+  bool Found = false;
+  if (llvm::is_contained(FeaturesVec, "-hard-float")) {
+    Found |= FindVSXSubfeature("+vsx", "-mvsx", "-msoft-float");
+    Found |= FindVSXSubfeature("+altivec", "-maltivec", "-msoft-float");
+    Found |=
+        FindVSXSubfeature("+power8-vector", "-mpower8-vector", "-msoft-float");
+    Found |= FindVSXSubfeature("+direct-move", "-mdirect-move", 
"-msoft-float");
+    Found |= FindVSXSubfeature("+float128", "-mfloat128", "-msoft-float");
+    Found |=
+        FindVSXSubfeature("+power9-vector", "-mpower9-vector", "-msoft-float");
+    Found |= FindVSXSubfeature("+paired-vector-memops",
+                               "-mpaired-vector-memops", "-msoft-float");
+    Found |= FindVSXSubfeature("+mma", "-mmma", "-msoft-float");
+    Found |= FindVSXSubfeature("+power10-vector", "-mpower10-vector",
+                               "-msoft-float");
   }
+  if (Found)
+    return false;
 
   // Cannot allow VSX with no Altivec.
   if (llvm::is_contained(FeaturesVec, "+vsx") &&
@@ -493,21 +507,14 @@ static bool ppcUserFeaturesCheck(DiagnosticsEngine &Diags,
   if (!llvm::is_contained(FeaturesVec, "-vsx"))
     return true;
 
-  auto FindVSXSubfeature = [&](StringRef Feature, StringRef Option) {
-    if (llvm::is_contained(FeaturesVec, Feature)) {
-      Diags.Report(diag::err_opt_not_valid_with_opt) << Option << "-mno-vsx";
-      return true;
-    }
-    return false;
-  };
-
-  bool Found = FindVSXSubfeature("+power8-vector", "-mpower8-vector");
-  Found |= FindVSXSubfeature("+direct-move", "-mdirect-move");
-  Found |= FindVSXSubfeature("+float128", "-mfloat128");
-  Found |= FindVSXSubfeature("+power9-vector", "-mpower9-vector");
-  Found |= FindVSXSubfeature("+paired-vector-memops", 
"-mpaired-vector-memops");
-  Found |= FindVSXSubfeature("+mma", "-mmma");
-  Found |= FindVSXSubfeature("+power10-vector", "-mpower10-vector");
+  Found = FindVSXSubfeature("+power8-vector", "-mpower8-vector", "-mno-vsx");
+  Found |= FindVSXSubfeature("+direct-move", "-mdirect-move", "-mno-vsx");
+  Found |= FindVSXSubfeature("+float128", "-mfloat128", "-mno-vsx");
+  Found |= FindVSXSubfeature("+power9-vector", "-mpower9-vector", "-mno-vsx");
+  Found |= FindVSXSubfeature("+paired-vector-memops", "-mpaired-vector-memops",
+                             "-mno-vsx");
+  Found |= FindVSXSubfeature("+mma", "-mmma", "-mno-vsx");
+  Found |= FindVSXSubfeature("+power10-vector", "-mpower10-vector", 
"-mno-vsx");
 
   // Return false if any vsx subfeatures was found.
   return !Found;
@@ -693,6 +700,13 @@ bool PPCTargetInfo::initFeatureMap(
   if (llvm::is_contained(FeaturesVec, "-hard-float")) {
     Features["altivec"] = false;
     Features["vsx"] = false;
+    Features["direct-move"] = false;
+    Features["power8-vector"] = false;
+    Features["power9-vector"] = false;
+    Features["paired-vector-memops"] = false;
+    Features["power10-vector"] = false;
+    Features["float128"] = false;
+    Features["mma"] = false;
   }
 
   return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);
diff --git a/clang/test/Driver/ppc-dependent-options.cpp 
b/clang/test/Driver/ppc-dependent-options.cpp
index 414ed1e70bb30..b62ed399054af 100644
--- a/clang/test/Driver/ppc-dependent-options.cpp
+++ b/clang/test/Driver/ppc-dependent-options.cpp
@@ -89,6 +89,30 @@
 // RUN: -std=c++11 -msoft-float -mvsx %s 2>&1 | \
 // RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-VSX
 
+// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
+// RUN: -std=c++11 -msoft-float -mpower8-vector %s 2>&1 | \
+// RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-P8VEC
+
+// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
+// RUN: -std=c++11 -msoft-float -mpower9-vector %s 2>&1 | \
+// RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-P9VEC
+
+// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
+// RUN: -std=c++11 -msoft-float -mpower10-vector %s 2>&1 | \
+// RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-P10VEC
+
+// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
+// RUN: -std=c++11 -msoft-float -mdirect-move %s 2>&1 | \
+// RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-DIRECTMOVE
+
+// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
+// RUN: -std=c++11 -msoft-float -mmma %s 2>&1 | \
+// RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-MMA
+
+// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
+// RUN: -std=c++11 -msoft-float -mpaired-vector-memops %s 2>&1 | \
+// RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-PAIREDVECMEMOP
+
 #ifdef __VSX__
 static_assert(false, "VSX enabled");
 #endif
@@ -126,5 +150,12 @@ static_assert(false, "Neither enabled");
 // CHECK-NVSX: Neither enabled
 // CHECK-VSX: VSX enabled
 // CHECK-NALTI-VSX: error: option '-mvsx' cannot be specified with 
'-mno-altivec'
-// CHECK-SOFTFLT-ALTI: error: option '-msoft-float' cannot be specified with 
'-maltivec'
-// CHECK-SOFTFLT-VSX: error: option '-msoft-float' cannot be specified with 
'-mvsx'
+// CHECK-SOFTFLT-ALTI: error: option '-maltivec' cannot be specified with 
'-msoft-float'
+// CHECK-SOFTFLT-VSX: error: option '-mvsx' cannot be specified with 
'-msoft-float'
+// CHECK-SOFTFLT-FLOAT128: error: option '-mfloat128' cannot be specified with 
'-msoft-float'
+// CHECK-SOFTFLT-P8VEC: error: option '-mpower8-vector' cannot be specified 
with '-msoft-float'
+// CHECK-SOFTFLT-P9VEC: error: option '-mpower9-vector' cannot be specified 
with '-msoft-float'
+// CHECK-SOFTFLT-P10VEC: error: option '-mpower10-vector' cannot be specified 
with '-msoft-float'
+// CHECK-SOFTFLT-DIRECTMOVE: error: option '-mdirect-move' cannot be specified 
with '-msoft-float'
+// CHECK-SOFTFLT-MMA: error: option '-mmma' cannot be specified with 
'-msoft-float'
+// CHECK-SOFTFLT-PAIREDVECMEMOP: error: option '-mpaired-vector-memops' cannot 
be specified with '-msoft-float'
diff --git a/clang/test/Driver/ppc-soft-float.c 
b/clang/test/Driver/ppc-soft-float.c
index 7b9205662ffeb..2fac9f4035f9d 100644
--- a/clang/test/Driver/ppc-soft-float.c
+++ b/clang/test/Driver/ppc-soft-float.c
@@ -8,6 +8,19 @@ int main () {
 // CHECKSOFT-DAG: -hard-float
 // CHECKSOFT-DAG: -vsx
 // CHECKSOFT-DAG: -altivec
+// CHECKSOFT-DAG: -direct-move,
+// CHECKSOFT-DAG: -float128
+// CHECKSOFT-DAG: -mma
+// CHECKSOFT-DAG: -paired-vector-memops
+// CHECKSOFT-DAG: -power10-vector
+// CHECKSOFT-DAG: -power9-vector
+// CHECKSOFT-DAG: -power8-vector
 
 // CHECKNOSOFT-DAG: +vsx
 // CHECKNOSOFT-DAG: +altivec
+// CHECKNOSOFT-DAG: +direct-move,
+// CHECKNOSOFT-DAG: +mma
+// CHECKNOSOFT-DAG: +paired-vector-memops
+// CHECKNOSOFT-DAG: +power10-vector
+// CHECKNOSOFT-DAG: +power9-vector
+// CHECKNOSOFT-DAG: +power8-vector

>From b61eee912b0400d94b8b450cff5b82be461f70ed Mon Sep 17 00:00:00 2001
From: Zaara Syeda <syza...@cpap8104.rtp.raleigh.ibm.com>
Date: Wed, 31 Jul 2024 15:49:23 -0400
Subject: [PATCH 3/5] Address review

---
 clang/lib/Basic/Targets/PPC.cpp             | 2 ++
 clang/test/Driver/ppc-dependent-options.cpp | 5 +++++
 clang/test/Driver/ppc-soft-float.c          | 6 ++++--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp
index 3b3aec4c414eb..a34be7f50efba 100644
--- a/clang/lib/Basic/Targets/PPC.cpp
+++ b/clang/lib/Basic/Targets/PPC.cpp
@@ -489,6 +489,7 @@ static bool ppcUserFeaturesCheck(DiagnosticsEngine &Diags,
     Found |= FindVSXSubfeature("+paired-vector-memops",
                                "-mpaired-vector-memops", "-msoft-float");
     Found |= FindVSXSubfeature("+mma", "-mmma", "-msoft-float");
+    Found |= FindVSXSubfeature("+crypto", "-mcrypto", "-msoft-float");
     Found |= FindVSXSubfeature("+power10-vector", "-mpower10-vector",
                                "-msoft-float");
   }
@@ -707,6 +708,7 @@ bool PPCTargetInfo::initFeatureMap(
     Features["power10-vector"] = false;
     Features["float128"] = false;
     Features["mma"] = false;
+    Features["crypto"] = false;
   }
 
   return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);
diff --git a/clang/test/Driver/ppc-dependent-options.cpp 
b/clang/test/Driver/ppc-dependent-options.cpp
index b62ed399054af..46d6beafbc174 100644
--- a/clang/test/Driver/ppc-dependent-options.cpp
+++ b/clang/test/Driver/ppc-dependent-options.cpp
@@ -113,6 +113,10 @@
 // RUN: -std=c++11 -msoft-float -mpaired-vector-memops %s 2>&1 | \
 // RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-PAIREDVECMEMOP
 
+// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
+// RUN: -std=c++11 -msoft-float -mcrypto %s 2>&1 | \
+// RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-CRYPTO
+
 #ifdef __VSX__
 static_assert(false, "VSX enabled");
 #endif
@@ -159,3 +163,4 @@ static_assert(false, "Neither enabled");
 // CHECK-SOFTFLT-DIRECTMOVE: error: option '-mdirect-move' cannot be specified 
with '-msoft-float'
 // CHECK-SOFTFLT-MMA: error: option '-mmma' cannot be specified with 
'-msoft-float'
 // CHECK-SOFTFLT-PAIREDVECMEMOP: error: option '-mpaired-vector-memops' cannot 
be specified with '-msoft-float'
+// CHECK-SOFTFLT-CRYPTO: error: option '-mcrypto' cannot be specified with 
'-msoft-float'
diff --git a/clang/test/Driver/ppc-soft-float.c 
b/clang/test/Driver/ppc-soft-float.c
index 2fac9f4035f9d..18d768aec0ded 100644
--- a/clang/test/Driver/ppc-soft-float.c
+++ b/clang/test/Driver/ppc-soft-float.c
@@ -8,19 +8,21 @@ int main () {
 // CHECKSOFT-DAG: -hard-float
 // CHECKSOFT-DAG: -vsx
 // CHECKSOFT-DAG: -altivec
-// CHECKSOFT-DAG: -direct-move,
+// CHECKSOFT-DAG: -direct-move
 // CHECKSOFT-DAG: -float128
 // CHECKSOFT-DAG: -mma
 // CHECKSOFT-DAG: -paired-vector-memops
 // CHECKSOFT-DAG: -power10-vector
 // CHECKSOFT-DAG: -power9-vector
 // CHECKSOFT-DAG: -power8-vector
+// CHECKSOFT-DAG: -crypto
 
 // CHECKNOSOFT-DAG: +vsx
 // CHECKNOSOFT-DAG: +altivec
-// CHECKNOSOFT-DAG: +direct-move,
+// CHECKNOSOFT-DAG: +direct-move
 // CHECKNOSOFT-DAG: +mma
 // CHECKNOSOFT-DAG: +paired-vector-memops
 // CHECKNOSOFT-DAG: +power10-vector
 // CHECKNOSOFT-DAG: +power9-vector
 // CHECKNOSOFT-DAG: +power8-vector
+// CHECKNOSOFT-DAG: +crypto

>From e7b9974f7080ecaff69222e8806738226d2c9629 Mon Sep 17 00:00:00 2001
From: Zaara Syeda <syza...@cpap8104.rtp.raleigh.ibm.com>
Date: Wed, 7 Aug 2024 11:48:52 -0400
Subject: [PATCH 4/5] Address review

---
 clang/lib/Basic/Targets/PPC.cpp | 19 ++++---------------
 1 file changed, 4 insertions(+), 15 deletions(-)

diff --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp
index a34be7f50efba..4bb686b6d3815 100644
--- a/clang/lib/Basic/Targets/PPC.cpp
+++ b/clang/lib/Basic/Targets/PPC.cpp
@@ -697,20 +697,6 @@ bool PPCTargetInfo::initFeatureMap(
     Diags.Report(diag::err_opt_not_valid_with_opt) << "-mprivileged" << CPU;
     return false;
   }
-
-  if (llvm::is_contained(FeaturesVec, "-hard-float")) {
-    Features["altivec"] = false;
-    Features["vsx"] = false;
-    Features["direct-move"] = false;
-    Features["power8-vector"] = false;
-    Features["power9-vector"] = false;
-    Features["paired-vector-memops"] = false;
-    Features["power10-vector"] = false;
-    Features["float128"] = false;
-    Features["mma"] = false;
-    Features["crypto"] = false;
-  }
-
   return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);
 }
 
@@ -802,11 +788,14 @@ void 
PPCTargetInfo::setFeatureEnabled(llvm::StringMap<bool> &Features,
       Features["efpu2"] = false;
     // If we're disabling altivec or vsx go ahead and disable all of the vsx
     // features.
-    if ((Name == "altivec") || (Name == "vsx"))
+    if ((Name == "altivec") || (Name == "vsx") || (Name == "hard-float")) {
+      if (Name != "vsx")
+        Features["altivec"] = Features["crypto"] = false;
       Features["vsx"] = Features["direct-move"] = Features["power8-vector"] =
           Features["float128"] = Features["power9-vector"] =
               Features["paired-vector-memops"] = Features["mma"] =
                   Features["power10-vector"] = false;
+    }
     if (Name == "power8-vector")
       Features["power9-vector"] = Features["paired-vector-memops"] =
           Features["mma"] = Features["power10-vector"] = false;

>From 484a352074614710f455bfbb3b3f160d731f111c Mon Sep 17 00:00:00 2001
From: Zaara Syeda <syza...@cpap8104.rtp.raleigh.ibm.com>
Date: Wed, 7 Aug 2024 11:54:10 -0400
Subject: [PATCH 5/5] Fix comment

---
 clang/lib/Basic/Targets/PPC.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp
index 4bb686b6d3815..8fa3563334a31 100644
--- a/clang/lib/Basic/Targets/PPC.cpp
+++ b/clang/lib/Basic/Targets/PPC.cpp
@@ -786,8 +786,8 @@ void PPCTargetInfo::setFeatureEnabled(llvm::StringMap<bool> 
&Features,
   } else {
     if (Name == "spe")
       Features["efpu2"] = false;
-    // If we're disabling altivec or vsx go ahead and disable all of the vsx
-    // features.
+    // If we're disabling altivec, hard-float, or vsx go ahead and disable all
+    // of the vsx features.
     if ((Name == "altivec") || (Name == "vsx") || (Name == "hard-float")) {
       if (Name != "vsx")
         Features["altivec"] = Features["crypto"] = false;

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

Reply via email to