dnsampaio created this revision. dnsampaio added reviewers: peter.smith, labrinea. Herald added subscribers: cfe-commits, dmgreen, kristof.beyls. Herald added a project: clang.
This patch restores the behaviour that -fpu overwrites the architecture obtained from -march or -mcpu flags, not enforcing to disable 'crypto' if march=armv7 and mfpu=neon-fp-armv8. However, it does warn that 'crypto' is ignored when passing mfpu=crypto-neon-fp-armv8. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D67608 Files: clang/lib/Driver/ToolChains/Arch/ARM.cpp clang/test/Driver/arm-features.c Index: clang/test/Driver/arm-features.c =================================================================== --- clang/test/Driver/arm-features.c +++ clang/test/Driver/arm-features.c @@ -79,3 +79,18 @@ // RUN: %clang -target arm-arm-none-eabi -mcpu=cortex-m23+crypto -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-NOCRYPTO5 %s // CHECK-NOCRYPTO5: warning: ignoring extension 'crypto' because the {{.*}} architecture does not support it // CHECK-NOCRYPTO5-NOT: "-target-feature" "+crypto"{{.*}} "-target-feature" "+sha2" "-target-feature" "+aes" +// +// Check +crypto does not affect -march=armv7a -mfpu=crypto-neon-fp-armv8, but it does warn that +crypto has no effect +// RUN: %clang -target arm-arm-none-eabi -march=armv7a -mfpu=crypto-neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=CHECK-WARNONLY,ALL %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+aes -mfpu=crypto-neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=CHECK-WARNONLY,ALL,CHECK-HASAES %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+sha2 -mfpu=crypto-neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=CHECK-WARNONLY,ALL,CHECK-HASSHA %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+sha2+aes -mfpu=crypto-neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=CHECK-WARNONLY,ALL,CHECK-HASSHA,CHECK-HASAES %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+aes -mfpu=neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=ALL,CHECK-HASAES %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+sha2 -mfpu=neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=ALL,CHECK-HASSHA %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+sha2+aes -mfpu=neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=ALL,CHECK-HASSHA,CHECK-HASAES %s +// CHECK-WARNONLY: warning: ignoring extension 'crypto' because the 'armv7-a' architecture does not support it +// ALL: "-target-feature" +// CHECK-WARNONLY-NOT: "-target-feature" "-crypto" +// CHECK-HASSHA-SAME: "-target-feature" "+sha2" +// CHECK-HASAES-SAME: "-target-feature" "+aes" +// Index: clang/lib/Driver/ToolChains/Arch/ARM.cpp =================================================================== --- clang/lib/Driver/ToolChains/Arch/ARM.cpp +++ clang/lib/Driver/ToolChains/Arch/ARM.cpp @@ -496,7 +496,12 @@ } else { D.Diag(clang::diag::warn_target_unsupported_extension) << "crypto" << llvm::ARM::getArchName(llvm::ARM::parseArch(ArchSuffix)); - Features.push_back("-crypto"); + //-mfpu=crypto-neon-fp-armv8 does allow +sha2 / +aes / +crypto features, + // even if compiling for an cpu armv7a, if explicitly defined by the user, + // so do not deactivate them. + if ((llvm::find(Features, "+fp-armv8") == Features.end()) || + (llvm::find(Features, "+neon") == Features.end())) + Features.push_back("-crypto"); } }
Index: clang/test/Driver/arm-features.c =================================================================== --- clang/test/Driver/arm-features.c +++ clang/test/Driver/arm-features.c @@ -79,3 +79,18 @@ // RUN: %clang -target arm-arm-none-eabi -mcpu=cortex-m23+crypto -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-NOCRYPTO5 %s // CHECK-NOCRYPTO5: warning: ignoring extension 'crypto' because the {{.*}} architecture does not support it // CHECK-NOCRYPTO5-NOT: "-target-feature" "+crypto"{{.*}} "-target-feature" "+sha2" "-target-feature" "+aes" +// +// Check +crypto does not affect -march=armv7a -mfpu=crypto-neon-fp-armv8, but it does warn that +crypto has no effect +// RUN: %clang -target arm-arm-none-eabi -march=armv7a -mfpu=crypto-neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=CHECK-WARNONLY,ALL %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+aes -mfpu=crypto-neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=CHECK-WARNONLY,ALL,CHECK-HASAES %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+sha2 -mfpu=crypto-neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=CHECK-WARNONLY,ALL,CHECK-HASSHA %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+sha2+aes -mfpu=crypto-neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=CHECK-WARNONLY,ALL,CHECK-HASSHA,CHECK-HASAES %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+aes -mfpu=neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=ALL,CHECK-HASAES %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+sha2 -mfpu=neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=ALL,CHECK-HASSHA %s +// RUN: %clang -target arm-arm-none-eabi -march=armv7a+sha2+aes -mfpu=neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefixes=ALL,CHECK-HASSHA,CHECK-HASAES %s +// CHECK-WARNONLY: warning: ignoring extension 'crypto' because the 'armv7-a' architecture does not support it +// ALL: "-target-feature" +// CHECK-WARNONLY-NOT: "-target-feature" "-crypto" +// CHECK-HASSHA-SAME: "-target-feature" "+sha2" +// CHECK-HASAES-SAME: "-target-feature" "+aes" +// Index: clang/lib/Driver/ToolChains/Arch/ARM.cpp =================================================================== --- clang/lib/Driver/ToolChains/Arch/ARM.cpp +++ clang/lib/Driver/ToolChains/Arch/ARM.cpp @@ -496,7 +496,12 @@ } else { D.Diag(clang::diag::warn_target_unsupported_extension) << "crypto" << llvm::ARM::getArchName(llvm::ARM::parseArch(ArchSuffix)); - Features.push_back("-crypto"); + //-mfpu=crypto-neon-fp-armv8 does allow +sha2 / +aes / +crypto features, + // even if compiling for an cpu armv7a, if explicitly defined by the user, + // so do not deactivate them. + if ((llvm::find(Features, "+fp-armv8") == Features.end()) || + (llvm::find(Features, "+neon") == Features.end())) + Features.push_back("-crypto"); } }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits