forked from OSchip/llvm-project
[PowerPC] Restrict various P10 options to P10 only.
This patch attempts to restrict the following P10 options: ``` -mprefixed -mpcrel -mpaired-vector-memops ``` To P10 only. This will prevent the use of these options on P9 and earlier. The behaviour of this patch looks like the following on pre-P10: ``` $ clang -mcpu=pwr9 -mpaired-vector-memops test.c -o test error: option '-mpaired-vector-memops' cannot be specified without '-mcpu=pwr10' $ clang -mcpu=pwr9 -mprefixed test.c -o test error: option '-mprefixed' cannot be specified without '-mcpu=pwr10' $ clang -mcpu=pwr9 -mprefixed -mpcrel test.c -o test error: option '-mpcrel' cannot be specified without '-mcpu=pwr10 -mprefixed' $ clang -mcpu=pwr9 -mpcrel -mprefixed test.c -o test error: option '-mpcrel' cannot be specified without '-mcpu=pwr10 -mprefixed' $ clang -mcpu=pwr9 -mpcrel test.c -o test error: option '-mpcrel' cannot be specified without '-mcpu=pwr10 -mprefixed' ``` Differential Revision: https://reviews.llvm.org/D109652
This commit is contained in:
parent
607fb1bb8c
commit
5eaf5b9161
|
@ -568,11 +568,33 @@ bool PPCTargetInfo::initFeatureMap(
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!(ArchDefs & ArchDefinePwr10) &&
|
||||
llvm::is_contained(FeaturesVec, "+mma")) {
|
||||
// We have MMA on PPC but not power 10 and above.
|
||||
Diags.Report(diag::err_opt_not_valid_with_opt) << "-mmma" << CPU;
|
||||
return false;
|
||||
if (!(ArchDefs & ArchDefinePwr10)) {
|
||||
if (llvm::find(FeaturesVec, "+mma") != FeaturesVec.end()) {
|
||||
// MMA operations are not available pre-Power10.
|
||||
Diags.Report(diag::err_opt_not_valid_with_opt) << "-mmma" << CPU;
|
||||
return false;
|
||||
}
|
||||
if (llvm::find(FeaturesVec, "+pcrel") != FeaturesVec.end()) {
|
||||
// PC-Relative instructions are not available pre-Power10,
|
||||
// and these instructions also require prefixed instructions support.
|
||||
Diags.Report(diag::err_opt_not_valid_without_opt)
|
||||
<< "-mpcrel"
|
||||
<< "-mcpu=pwr10 -mprefixed";
|
||||
return false;
|
||||
}
|
||||
if (llvm::find(FeaturesVec, "+prefixed") != FeaturesVec.end()) {
|
||||
// Prefixed instructions are not available pre-Power10.
|
||||
Diags.Report(diag::err_opt_not_valid_without_opt) << "-mprefixed"
|
||||
<< "-mcpu=pwr10";
|
||||
return false;
|
||||
}
|
||||
if (llvm::find(FeaturesVec, "+paired-vector-memops") != FeaturesVec.end()) {
|
||||
// Paired vector memops are not available pre-Power10.
|
||||
Diags.Report(diag::err_opt_not_valid_without_opt)
|
||||
<< "-mpaired-vector-memops"
|
||||
<< "-mcpu=pwr10";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(ArchDefs & ArchDefinePwr8) &&
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: %clang -target powerpc64le-unknown-linux-gnu -S -emit-llvm \
|
||||
// RUN: -mcpu=pwr10 -mpaired-vector-memops %s -o - | FileCheck %s \
|
||||
// RUN: --check-prefix=HASPAIRED
|
||||
// RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
|
||||
// RUN: -mcpu=pwr9 -mpaired-vector-memops %s 2>&1 | FileCheck %s \
|
||||
// RUN: --check-prefix=NOPAIRED
|
||||
// RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
|
||||
// RUN: -mpaired-vector-memops %s 2>&1 | FileCheck %s \
|
||||
// RUN: --check-prefix=NOPAIRED
|
||||
|
||||
// RUN: %clang -target powerpc64le-unknown-linux-gnu -S -emit-llvm \
|
||||
// RUN: -mcpu=pwr10 -mprefixed %s -o - | FileCheck %s \
|
||||
// RUN: --check-prefix=HASPREFIXED
|
||||
// RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
|
||||
// RUN: -mcpu=pwr9 -mprefixed %s 2>&1 | FileCheck %s \
|
||||
// RUN: --check-prefix=NOPREFIXED
|
||||
// RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
|
||||
// RUN: -mprefixed %s 2>&1 | FileCheck %s \
|
||||
// RUN: --check-prefix=NOPREFIXED
|
||||
|
||||
// RUN: %clang -target powerpc64le-unknown-linux-gnu -S -emit-llvm \
|
||||
// RUN: -mcpu=pwr10 -mpcrel %s -o - | FileCheck %s \
|
||||
// RUN: --check-prefix=HASPCREL
|
||||
// RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
|
||||
// RUN: -mcpu=pwr9 -mpcrel %s 2>&1 | FileCheck %s \
|
||||
// RUN: --check-prefix=NOPCREL
|
||||
// RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
|
||||
// RUN: -mpcrel %s 2>&1 | FileCheck %s \
|
||||
// RUN: --check-prefix=NOPCREL
|
||||
|
||||
// RUN: %clang -target powerpc64le-unknown-linux-gnu -S -emit-llvm \
|
||||
// RUN: -mcpu=pwr10 -mpcrel -mprefixed %s -o - | FileCheck %s \
|
||||
// RUN: --check-prefix=HASPCREL-PREFIX
|
||||
// RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
|
||||
// RUN: -mcpu=pwr9 -mpcrel -mprefixed %s 2>&1 | FileCheck %s \
|
||||
// RUN: --check-prefix=NOPCREL-PREFIX
|
||||
// RUN: not %clang -target powerpc64le-unknown-linux-gnu -fsyntax-only \
|
||||
// RUN: -mpcrel -mprefixed %s 2>&1 | FileCheck %s \
|
||||
// RUN: --check-prefix=NOPCREL-PREFIX
|
||||
|
||||
int test_p10_features() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// HASPAIRED: test_p10_features() #0 {
|
||||
// HASPAIRED: attributes #0 = {
|
||||
// HASPAIRED-SAME: +paired-vector-memops
|
||||
// NOPAIRED: option '-mpaired-vector-memops' cannot be specified without '-mcpu=pwr10'
|
||||
|
||||
// HASPREFIXED: test_p10_features() #0 {
|
||||
// HASPREFIXED: attributes #0 = {
|
||||
// HASPREFIXED-SAME: +prefix-instrs
|
||||
// NOPREFIXED: option '-mprefixed' cannot be specified without '-mcpu=pwr10'
|
||||
|
||||
// HASPCREL: test_p10_features() #0 {
|
||||
// HASPCREL: attributes #0 = {
|
||||
// HASPCREL-SAME: +pcrelative-memops
|
||||
// NOPCREL: option '-mpcrel' cannot be specified without '-mcpu=pwr10 -mprefixed'
|
||||
|
||||
// HASPCREL-PREFIX: test_p10_features() #0 {
|
||||
// HASPCREL-PREFIX: attributes #0 = {
|
||||
// HASPCREL-PREFIX-SAME: +pcrelative-memops
|
||||
// HASPCREL-PREFIX-SAME: +prefix-instrs
|
||||
// NOPCREL-PREFIX: option '-mpcrel' cannot be specified without '-mcpu=pwr10 -mprefixed'
|
||||
|
Loading…
Reference in New Issue