diff --git a/clang/test/Driver/riscv-cpus.c b/clang/test/Driver/riscv-cpus.c --- a/clang/test/Driver/riscv-cpus.c +++ b/clang/test/Driver/riscv-cpus.c @@ -2,20 +2,24 @@ // RUN: %clang --target=riscv32 -### -c %s 2>&1 -mcpu=rocket-rv32 | FileCheck -check-prefix=MCPU-ROCKET32 %s // MCPU-ROCKET32: "-nostdsysteminc" "-target-cpu" "rocket-rv32" +// MCPU-ROCKET32: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // RUN: %clang --target=riscv64 -### -c %s 2>&1 -mcpu=rocket-rv64 | FileCheck -check-prefix=MCPU-ROCKET64 %s // MCPU-ROCKET64: "-nostdsysteminc" "-target-cpu" "rocket-rv64" +// MCPU-ROCKET64: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-ROCKET64: "-target-feature" "+64bit" // RUN: %clang --target=riscv32 -### -c %s 2>&1 -mcpu=syntacore-scr1-base | FileCheck -check-prefix=MCPU-SYNTACORE-SCR1-BASE %s // MCPU-SYNTACORE-SCR1-BASE: "-target-cpu" "syntacore-scr1-base" // MCPU-SYNTACORE-SCR1-BASE: "-target-feature" "+c" +// MCPU-SYNTACORE-SCR1-BASE: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SYNTACORE-SCR1-BASE: "-target-feature" "-64bit" // MCPU-SYNTACORE-SCR1-BASE: "-target-abi" "ilp32" // RUN: %clang --target=riscv32 -### -c %s 2>&1 -mcpu=syntacore-scr1-max | FileCheck -check-prefix=MCPU-SYNTACORE-SCR1-MAX %s // MCPU-SYNTACORE-SCR1-MAX: "-target-cpu" "syntacore-scr1-max" // MCPU-SYNTACORE-SCR1-MAX: "-target-feature" "+m" "-target-feature" "+c" +// MCPU-SYNTACORE-SCR1-MAX: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SYNTACORE-SCR1-MAX: "-target-feature" "-64bit" // MCPU-SYNTACORE-SCR1-MAX: "-target-abi" "ilp32" @@ -56,12 +60,14 @@ // RUN: %clang --target=riscv64 -### -c %s 2>&1 -mcpu=sifive-e20 | FileCheck -check-prefix=MCPU-SIFIVE-E20 %s // MCPU-SIFIVE-E20: "-nostdsysteminc" "-target-cpu" "sifive-e20" // MCPU-SIFIVE-E20: "-target-feature" "+m" "-target-feature" "+c" +// MCPU-SIFIVE-E20: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-E20: "-target-abi" "ilp32" // mcpu with default march // RUN: %clang --target=riscv64 -### -c %s 2>&1 -mcpu=sifive-e21 | FileCheck -check-prefix=MCPU-SIFIVE-E21 %s // MCPU-SIFIVE-E21: "-nostdsysteminc" "-target-cpu" "sifive-e21" // MCPU-SIFIVE-E21: "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+c" +// MCPU-SIFIVE-E21: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-E21: "-target-abi" "ilp32" // mcpu with default march @@ -69,6 +75,7 @@ // MCPU-SIFIVE-E24: "-nostdsysteminc" "-target-cpu" "sifive-e24" // MCPU-SIFIVE-E24: "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" // MCPU-SIFIVE-E24: "-target-feature" "+c" +// MCPU-SIFIVE-E24: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-E24: "-target-abi" "ilp32" // mcpu with default march @@ -76,6 +83,7 @@ // MCPU-SIFIVE-E34: "-nostdsysteminc" "-target-cpu" "sifive-e34" // MCPU-SIFIVE-E34: "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" // MCPU-SIFIVE-E34: "-target-feature" "+c" +// MCPU-SIFIVE-E34: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-E34: "-target-abi" "ilp32" // mcpu with mabi option @@ -83,6 +91,7 @@ // MCPU-ABI-SIFIVE-S21: "-nostdsysteminc" "-target-cpu" "sifive-s21" // MCPU-ABI-SIFIVE-S21: "-target-feature" "+m" "-target-feature" "+a" // MCPU-ABI-SIFIVE-S21: "-target-feature" "+c" +// MCPU-ABI-SIFIVE-S21: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-ABI-SIFIVE-S21: "-target-feature" "+64bit" // MCPU-ABI-SIFIVE-S21: "-target-abi" "lp64" @@ -91,6 +100,7 @@ // MCPU-ABI-SIFIVE-S51: "-nostdsysteminc" "-target-cpu" "sifive-s51" // MCPU-ABI-SIFIVE-S51: "-target-feature" "+m" "-target-feature" "+a" // MCPU-ABI-SIFIVE-S51: "-target-feature" "+c" +// MCPU-ABI-SIFIVE-S51: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-ABI-SIFIVE-S51: "-target-feature" "+64bit" // MCPU-ABI-SIFIVE-S51: "-target-abi" "lp64" @@ -99,6 +109,7 @@ // MCPU-SIFIVE-S54: "-nostdsysteminc" "-target-cpu" "sifive-s54" // MCPU-SIFIVE-S54: "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" "-target-feature" "+d" // MCPU-SIFIVE-S54: "-target-feature" "+c" +// MCPU-SIFIVE-S54: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-S54: "-target-feature" "+64bit" // MCPU-SIFIVE-S54: "-target-abi" "lp64d" @@ -107,6 +118,7 @@ // MCPU-SIFIVE-S76: "-nostdsysteminc" "-target-cpu" "sifive-s76" // MCPU-SIFIVE-S76: "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" "-target-feature" "+d" // MCPU-SIFIVE-S76: "-target-feature" "+c" +// MCPU-SIFIVE-S76: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-S76: "-target-feature" "+64bit" // MCPU-SIFIVE-S76: "-target-abi" "lp64d" @@ -115,6 +127,7 @@ // MCPU-SIFIVE-U54: "-nostdsysteminc" "-target-cpu" "sifive-u54" // MCPU-SIFIVE-U54: "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" "-target-feature" "+d" // MCPU-SIFIVE-U54: "-target-feature" "+c" +// MCPU-SIFIVE-U54: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-U54: "-target-feature" "+64bit" // MCPU-SIFIVE-U54: "-target-abi" "lp64d" @@ -123,6 +136,7 @@ // MCPU-ABI-SIFIVE-U54: "-nostdsysteminc" "-target-cpu" "sifive-u54" // MCPU-ABI-SIFIVE-U54: "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" "-target-feature" "+d" // MCPU-ABI-SIFIVE-U54: "-target-feature" "+c" +// MCPU-ABI-SIFIVE-U54: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-ABI-SIFIVE-U54: "-target-feature" "+64bit" // MCPU-ABI-SIFIVE-U54: "-target-abi" "lp64" @@ -131,6 +145,7 @@ // MCPU-SIFIVE-E76: "-nostdsysteminc" "-target-cpu" "sifive-e76" // MCPU-SIFIVE-E76: "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" // MCPU-SIFIVE-E76: "-target-feature" "+c" +// MCPU-SIFIVE-E76: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-E76: "-target-abi" "ilp32" // mcpu with mabi option @@ -138,6 +153,7 @@ // MCPU-ABI-SIFIVE-U74: "-nostdsysteminc" "-target-cpu" "sifive-u74" // MCPU-ABI-SIFIVE-U74: "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" "-target-feature" "+d" // MCPU-ABI-SIFIVE-U74: "-target-feature" "+c" +// MCPU-ABI-SIFIVE-U74: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-ABI-SIFIVE-U74: "-target-feature" "+64bit" // MCPU-ABI-SIFIVE-U74: "-target-abi" "lp64" @@ -149,7 +165,7 @@ // Check interaction between mcpu and mtune, mtune won't affect arch related // target feature, but mcpu will. // -// In this case, sifive-e31 is rv32imac, sifive-e76 is rv32imafc, so M-extension +// In this case, sifive-e31 is rv32imac, sifive-e76 is rv32imafc, so F-extension // should not enabled. // // RUN: %clang --target=riscv32 -### -c %s 2>&1 -mcpu=sifive-e31 -mtune=sifive-e76 | FileCheck -check-prefix=MTUNE-E31-MCPU-E76 %s @@ -158,6 +174,7 @@ // MTUNE-E31-MCPU-E76-SAME: "-target-feature" "+m" // MTUNE-E31-MCPU-E76-SAME: "-target-feature" "+a" // MTUNE-E31-MCPU-E76-SAME: "-target-feature" "+c" +// MTUNE-E31-MCPU-E76-SAME: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MTUNE-E31-MCPU-E76-SAME: "-tune-cpu" "sifive-e76" // Check failed cases diff --git a/llvm/lib/Target/RISCV/RISCVProcessors.td b/llvm/lib/Target/RISCV/RISCVProcessors.td --- a/llvm/lib/Target/RISCV/RISCVProcessors.td +++ b/llvm/lib/Target/RISCV/RISCVProcessors.td @@ -37,10 +37,14 @@ def ROCKET_RV32 : RISCVProcessorModel<"rocket-rv32", RocketModel, - [Feature32Bit]>; + [Feature32Bit, + FeatureStdExtZifencei, + FeatureStdExtZicsr]>; def ROCKET_RV64 : RISCVProcessorModel<"rocket-rv64", RocketModel, - [Feature64Bit]>; + [Feature64Bit, + FeatureStdExtZifencei, + FeatureStdExtZicsr]>; def ROCKET : RISCVTuneProcessorModel<"rocket", RocketModel>; @@ -51,12 +55,16 @@ def SIFIVE_E20 : RISCVProcessorModel<"sifive-e20", RocketModel, [Feature32Bit, + FeatureStdExtZicsr, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtC]>; def SIFIVE_E21 : RISCVProcessorModel<"sifive-e21", RocketModel, [Feature32Bit, + FeatureStdExtZicsr, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtC]>; @@ -64,6 +72,7 @@ def SIFIVE_E24 : RISCVProcessorModel<"sifive-e24", RocketModel, [Feature32Bit, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtF, @@ -72,6 +81,8 @@ def SIFIVE_E31 : RISCVProcessorModel<"sifive-e31", RocketModel, [Feature32Bit, + FeatureStdExtZifencei, + FeatureStdExtZicsr, FeatureStdExtM, FeatureStdExtA, FeatureStdExtC]>; @@ -79,6 +90,7 @@ def SIFIVE_E34 : RISCVProcessorModel<"sifive-e34", RocketModel, [Feature32Bit, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtF, @@ -87,6 +99,7 @@ def SIFIVE_E76 : RISCVProcessorModel<"sifive-e76", SiFive7Model, [Feature32Bit, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtF, @@ -96,6 +109,8 @@ def SIFIVE_S21 : RISCVProcessorModel<"sifive-s21", RocketModel, [Feature64Bit, + FeatureStdExtZicsr, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtC]>; @@ -103,6 +118,8 @@ def SIFIVE_S51 : RISCVProcessorModel<"sifive-s51", RocketModel, [Feature64Bit, + FeatureStdExtZicsr, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtC]>; @@ -110,6 +127,7 @@ def SIFIVE_S54 : RISCVProcessorModel<"sifive-s54", RocketModel, [Feature64Bit, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtF, @@ -119,6 +137,7 @@ def SIFIVE_S76 : RISCVProcessorModel<"sifive-s76", SiFive7Model, [Feature64Bit, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtF, @@ -129,6 +148,7 @@ def SIFIVE_U54 : RISCVProcessorModel<"sifive-u54", RocketModel, [Feature64Bit, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtF, @@ -138,6 +158,7 @@ def SIFIVE_U74 : RISCVProcessorModel<"sifive-u74", SiFive7Model, [Feature64Bit, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtA, FeatureStdExtF, @@ -148,12 +169,16 @@ def SYNTACORE_SCR1_BASE : RISCVProcessorModel<"syntacore-scr1-base", SyntacoreSCR1Model, [Feature32Bit, + FeatureStdExtZicsr, + FeatureStdExtZifencei, FeatureStdExtC], [TuneNoDefaultUnroll]>; def SYNTACORE_SCR1_MAX : RISCVProcessorModel<"syntacore-scr1-max", SyntacoreSCR1Model, [Feature32Bit, + FeatureStdExtZicsr, + FeatureStdExtZifencei, FeatureStdExtM, FeatureStdExtC], [TuneNoDefaultUnroll]>;