Skip to content

Commit 228fbec

Browse files
arichardsonresistor
authored andcommitted
[CHERI-RISC-V] Retire support for ISAv8 semantics in clang
This allows quite a lot of cleanup now that all supported implementations of CHERI-RISC-V default to ISAv9 semantics. Most importantly all the logic to handle trapping instructions can be dropped as well as the legacy support for CToPtr/CFromPtr.
1 parent 9424519 commit 228fbec

27 files changed

+492
-388
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5111,14 +5111,6 @@ def mno_xcheri_rvc : Flag<["-"], "mno-xcheri-rvc">, Alias<mxcheri_norvc>;
51115111
def mno_xcheri_norvc : Flag<["-"], "mno-xcheri-norvc">, Group<m_riscv_Features_Group>,
51125112
HelpText<"Enable using compressed CHERI instructions">;
51135113
def mxcheri_rvc : Flag<["-"], "mxcheri-rvc">, Alias<mno_xcheri_norvc>;
5114-
// Temporary flags to enable/disable CHERI ISAv8 compatibility.
5115-
// Flag name is a bit odd but this is required by handleTargetFeaturesGroup().
5116-
def mxcheri_v9_semantics : Flag<["-"], "mxcheri-v9-semantics">, Group<m_riscv_Features_Group>,
5117-
HelpText<"Generate code that is no longer compatible with CHERI ISAv8">;
5118-
def mno_xcheri_v9_semantics : Flag<["-"], "mno-xcheri-v9-semantics">, Group<m_riscv_Features_Group>,
5119-
HelpText<"Generate code that is compatible with CHERI ISAv8">;
5120-
// Add an alias with a more sensible name for when the default is flipped.
5121-
def mxcheri_v8_compat : Flag<["-"], "mxcheri-v8-compat">, Alias<mno_xcheri_v9_semantics>;
51225114

51235115
def munaligned_access : Flag<["-"], "munaligned-access">, Group<m_Group>,
51245116
HelpText<"Allow memory accesses to be unaligned (AArch32/MIPSr6 only)">;

clang/lib/Basic/Targets/RISCV.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -317,11 +317,9 @@ void RISCVTargetInfo::getTargetDefines(const LangOptions &Opts,
317317
// for the capability-mode JALR with immediate). Remove after the next
318318
// CHERI-LLVM "release".
319319
Builder.defineMacro("__riscv_xcheri_mode_dependent_jumps");
320-
// Temporary defines to allow software to detect a new ISAv9 compiler.
321-
if (HasCheriISAv9Semantics) {
322-
Builder.defineMacro("__riscv_xcheri_tag_clear");
323-
Builder.defineMacro("__riscv_xcheri_no_relocation");
324-
}
320+
// Defines to allow software to detect a ISAv9 compiler vs. an older v8 one.
321+
Builder.defineMacro("__riscv_xcheri_tag_clear");
322+
Builder.defineMacro("__riscv_xcheri_no_relocation");
325323
}
326324

327325
if (ISAInfo->hasExtension("zve32x"))
@@ -463,8 +461,6 @@ bool RISCVTargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
463461
if (ISAInfo->hasExtension("xcheri")) {
464462
HasCheri = true;
465463
CapSize = XLen * 2;
466-
HasCheriISAv9Semantics =
467-
llvm::is_contained(Features, "+xcheri-v9-semantics");
468464
}
469465
if (ABI.empty())
470466
ABI = ISAInfo->computeDefaultABI().str();

clang/lib/Basic/Targets/RISCV.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ class RISCVTargetInfo : public TargetInfo {
7373
std::unique_ptr<llvm::RISCVISAInfo> ISAInfo;
7474
int CapSize = -1;
7575
bool HasCheri = false;
76-
bool HasCheriISAv9Semantics = false;
7776
bool IsABICHERIoT = false;
7877
bool IsABICHERIoTBareMetal = false;
7978
void setCapabilityABITypes() {

clang/test/CodeGen/cheri/cheri-hybrid-ptr-to-cap.c

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
// Check the assembly output to see if we used PCC or DDC
1010
// RUN: %cheri_cc1 -o - -S %s | FileCheck %s --check-prefixes=ASM,ASM-MIPS
11+
// RUN: %riscv64_cheri_cc1 -o - -S %s
1112
// RUN: %riscv64_cheri_cc1 -o - -S %s | FileCheck %s --check-prefixes=ASM,ASM-RISCV
1213

1314
void external_fn(void);
@@ -25,11 +26,11 @@ void *__capability global_fn_to_cap(void) {
2526
// ASM-MIPS: cgetpcc $c1
2627
// ASM-MIPS-NEXT: ld $1, %got_disp(external_fn)($1)
2728
// ASM-MIPS-NEXT: cfromptr $c3, $c1, $1
28-
// ASM-RISCV: cspecialr ca0, pcc
29-
// ASM-RISCV: auipc a1, %got_pcrel_hi(external_fn)
30-
// ASM-RISCV-NEXT: ld a1, %pcrel_lo(.Lpcrel_hi0)(a1)
31-
// ASM-RISCV-NEXT: cfromptr ca0, ca0, a1
32-
return (__cheri_tocap void *__capability) & external_fn;
29+
// ASM-RISCV: cspecialr ca1, pcc
30+
// ASM-RISCV: auipc a0, %got_pcrel_hi(external_fn)
31+
// ASM-RISCV-NEXT: ld a0, %pcrel_lo(.Lpcrel_hi0)(a0)
32+
// ASM-RISCV-NEXT: csetaddr ca1, ca1, a0
33+
return (__cheri_tocap void *__capability)&external_fn;
3334
}
3435

3536
// CHECK-LABEL: define {{[^@]+}}@global_data_to_cap
@@ -45,10 +46,11 @@ void *__capability global_data_to_cap(void) {
4546
// ASM-MIPS-NEXT: csetbounds $c3, $c1, 4
4647
// ASM-RISCV: auipc a0, %got_pcrel_hi(external_global)
4748
// ASM-RISCV-NEXT: ld a0, %pcrel_lo(.Lpcrel_hi1)(a0)
48-
// ASM-RISCV-NEXT: cfromptr ca0, ddc, a0
49+
// ASM-RISCV-NEXT: cspecialr ca1, ddc
50+
// ASM-RISCV-NEXT: csetaddr ca1, ca1, a0
4951
// We do not set bounds on RISCV
5052
// ASM-RISCV-NOT: csetbounds
51-
return (__cheri_tocap void *__capability) & external_global;
53+
return (__cheri_tocap void *__capability)&external_global;
5254
}
5355

5456
// CHECK-LABEL: define {{[^@]+}}@fn_ptr_to_cap
@@ -66,8 +68,8 @@ void *__capability fn_ptr_to_cap(void (*fn_ptr)(void)) {
6668
// ASM-LABEL: fn_ptr_to_cap:
6769
// ASM-MIPS: cgetpcc $c1
6870
// ASM-MIPS-NEXT: cfromptr $c3, $c1, $1
69-
// ASM-RISCV: cspecialr ca0, pcc
70-
// ASM-RISCV-NEXT: cfromptr ca0, ca0, a1
71+
// ASM-RISCV: cspecialr ca1, pcc
72+
// ASM-RISCV-NEXT: csetaddr ca1, ca1, a0
7173
return (__cheri_tocap void *__capability)fn_ptr;
7274
}
7375

@@ -86,7 +88,8 @@ void *__capability fn_ptr_to_cap(void (*fn_ptr)(void)) {
8688
void *__capability fn_ptr_to_cap_not_smart_enough(void (*fn_ptr)(void)) {
8789
// ASM-LABEL: fn_ptr_to_cap_not_smart_enough:
8890
// ASM-MIPS: cfromddc $c3, $1
89-
// ASM-RISCV: cfromptr ca0, ddc, a0
91+
// ASM-RISCV: cspecialr ca1, ddc
92+
// ASM-RISCV-NEXT: csetaddr ca1, ca1, a0
9093
// Note: In this case clang doesn't see that the result is actual a function
9194
// so it uses DDC:
9295
void *tmp = (void *)fn_ptr;
@@ -106,6 +109,7 @@ void *__capability data_ptr_to_cap(int *data_ptr) {
106109
// Note: For data pointers we derive from DDC:
107110
// ASM-LABEL: data_ptr_to_cap:
108111
// ASM-MIPS: cfromddc $c3, $1
109-
// ASM-RISCV: cfromptr ca0, ddc, a0
112+
// ASM-RISCV: cspecialr ca1, ddc
113+
// ASM-RISCV-NEXT: csetaddr ca1, ca1, a0
110114
return (__cheri_tocap void *__capability)data_ptr;
111115
}

clang/test/Driver/riscv-default-features.c

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,33 @@
11
// RUN: %clang --target=riscv32-unknown-elf -S -emit-llvm %s -o - | FileCheck %s -check-prefix=RV32
22
// RUN: %clang --target=riscv64-unknown-elf -S -emit-llvm %s -o - | FileCheck %s -check-prefix=RV64
33

4-
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -emit-llvm %s -o - | FileCheck %s -check-prefix=RV32-XCHERI
5-
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -emit-llvm %s -o - | FileCheck %s -check-prefix=RV64-XCHERI
6-
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -mno-xcheri-rvc -emit-llvm %s -o - | FileCheck %s -check-prefix=RV32-XCHERI-NORVC
7-
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -mno-xcheri-rvc -emit-llvm %s -o - | FileCheck %s -check-prefix=RV64-XCHERI-NORVC
8-
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -mxcheri-norvc -emit-llvm %s -o - | FileCheck %s -check-prefix=RV32-XCHERI-NORVC
9-
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -mxcheri-norvc -emit-llvm %s -o - | FileCheck %s -check-prefix=RV64-XCHERI-NORVC
4+
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV32-XCHERI,XCHERI
5+
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV64-XCHERI,XCHERI
6+
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -mno-xcheri-rvc -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV32-XCHERI-NORVC,XCHERI
7+
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -mno-xcheri-rvc -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV64-XCHERI-NORVC,XCHERI
8+
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -mxcheri-norvc -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV32-XCHERI-NORVC,XCHERI
9+
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -mxcheri-norvc -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV64-XCHERI-NORVC,XCHERI
1010
// The -mxcheri-rvc flag to explicitly disable xcheri-norvc:
11-
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -mxcheri-rvc -emit-llvm %s -o - | FileCheck %s -check-prefix=RV32-XCHERI-EXPLICIT-RVC
12-
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -mxcheri-rvc -emit-llvm %s -o - | FileCheck %s -check-prefix=RV64-XCHERI-EXPLICIT-RVC
13-
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -mno-xcheri-norvc -emit-llvm %s -o - | FileCheck %s -check-prefix=RV32-XCHERI-EXPLICIT-RVC
14-
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -mno-xcheri-norvc -emit-llvm %s -o - | FileCheck %s -check-prefix=RV64-XCHERI-EXPLICIT-RVC
15-
16-
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -mxcheri-v9-semantics -S -emit-llvm %s -o - | FileCheck %s -check-prefix=RV64-XCHERI-V9
17-
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -mxcheri-v8-compat -S -emit-llvm %s -o - | FileCheck %s -check-prefix=RV64-XCHERI-V8
11+
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -mxcheri-rvc -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV32-XCHERI,XCHERI,XCHERI-RVC
12+
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -mxcheri-rvc -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV64-XCHERI,XCHERI,XCHERI-RVC
13+
// RUN: %clang --target=riscv32-unknown-elf -march=rv32ixcheri -S -mno-xcheri-norvc -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV32-XCHERI,XCHERI,XCHERI-RVC
14+
// RUN: %clang --target=riscv64-unknown-elf -march=rv64ixcheri -S -mno-xcheri-norvc -emit-llvm %s -o - | FileCheck %s --check-prefixes=RV64-XCHERI,XCHERI,XCHERI-RVC
1815

1916
// RV32: "target-features"="+32bit,+a,+c,+m,+relax,
2017
// RV64: "target-features"="+64bit,+a,+c,+m,+relax,
2118

22-
// RV32-XCHERI: "target-features"="+32bit,+relax,+xcheri
23-
// RV64-XCHERI: "target-features"="+64bit,+relax,+xcheri
19+
// RV32-XCHERI: "target-features"="+32bit,+relax,+xcheri,
20+
// RV64-XCHERI: "target-features"="+64bit,+relax,+xcheri,
2421

2522
// RV32-XCHERI-RVC: "target-features"="+32bit,+relax,+xcheri
26-
// RV32-XCHERI-RVC: -save-restore
2723
// RV64-XCHERI-RVC: "target-features"="+64bit,+relax,+xcheri
28-
// RV64-XCHERI-RVC: -save-restore
2924
// RV32-XCHERI-NORVC: "target-features"="+32bit,+relax,+xcheri,+xcheri-norvc
3025
// RV64-XCHERI-NORVC: "target-features"="+64bit,+relax,+xcheri,+xcheri-norvc
3126
// RV32-XCHERI-EXPLICIT-RVC: "target-features"="+32bit,+relax,+xcheri
32-
// RV32-XCHERI-EXPLICIT-RVC-SAME -save-restore
33-
// RV32-XCHERI-EXPLICIT-RVC-SAME -xcheri-norvc
27+
// XCHERI-RVC-SAME: ,-xcheri-norvc,
3428
// RV64-XCHERI-EXPLICIT-RVC: "target-features"="+64bit,+relax,+xcheri
35-
// RV64-XCHERI-EXPLICIT-RVC-SAME -save-restore
36-
// RV64-XCHERI-EXPLICIT-RVC-SAME -xcheri-norvc
3729

38-
// RV64-XCHERI-V8: "target-features"="+64bit,+relax,+xcheri
39-
// RV64-XCHERI-V8-SAME: -xcheri-v9-semantics
40-
// RV64-XCHERI-V9: "target-features"="+64bit,+relax,+xcheri
41-
// RV64-XCHERI-V9-SAME: +xcheri-v9-semantics
30+
// XCHERI-NOT: xcheri,
4231

4332
// Dummy function
4433
int foo(void){

clang/test/Preprocessor/cheri-riscv-feature-flags.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
// RUN: %riscv64_cheri_cc1 -E -dM -ffreestanding < /dev/null \
2-
// RUN: | FileCheck %s --check-prefixes=CHECK,CHECK64 --implicit-check-not=cheri --implicit-check-not=CHERI
3-
// RUN: %riscv32_cheri_cc1 -E -dM -ffreestanding < /dev/null \
4-
// RUN: | FileCheck %s --check-prefixes=CHECK,CHECK32 --implicit-check-not=cheri --implicit-check-not=CHERI
5-
/// Check for the new flags for removed ISAv8 compatibility:
6-
// RUN: %riscv64_cheri_cc1 -E -dM -ffreestanding -target-feature +xcheri-v9-semantics < /dev/null \
72
// RUN: | FileCheck %s --check-prefixes=CHECK,CHECK64,CHECK-V9ISA --implicit-check-not=cheri --implicit-check-not=CHERI
8-
// RUN: %riscv32_cheri_cc1 -E -dM -ffreestanding -target-feature +xcheri-v9-semantics < /dev/null \
3+
// RUN: %riscv32_cheri_cc1 -E -dM -ffreestanding < /dev/null \
94
// RUN: | FileCheck %s --check-prefixes=CHECK,CHECK32,CHECK-V9ISA --implicit-check-not=cheri --implicit-check-not=CHERI
105

116
// CHECK32: #define __CHERI_ADDRESS_BITS__ 32

llvm/lib/Target/RISCV/RISCVFeatures.td

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,20 +1356,6 @@ def RV64 : HwMode<"+64bit", [IsRV64]>;
13561356
def IsRVE : Predicate<"Subtarget->isRVE()">,
13571357
AssemblerPredicate<(all_of FeatureStdExtE)>;
13581358

1359-
// TODO: Once all supported CheriBSD branches are ready for the new semantics
1360-
// this feature should be enabled automatically.
1361-
def FeatureCheriISAV9Semantics
1362-
: SubtargetFeature<"xcheri-v9-semantics", "HasCheriISAv9Semantics", "true",
1363-
"CHERI ISAv9 semantics (tag-clearing, no relocation)">;
1364-
def HasCheriISAv9
1365-
: Predicate<"Subtarget->hasCheriISAv9Semantics()">,
1366-
AssemblerPredicate<(all_of FeatureCheriISAV9Semantics),
1367-
"CHERI ISAv9 semantics (tag-clearing, no relocation)">;
1368-
def NotCheriISAv9
1369-
: Predicate<"!Subtarget->hasCheriISAv9Semantics()">,
1370-
AssemblerPredicate<(all_of (not FeatureCheriISAV9Semantics)),
1371-
"CHERI ISAv8 semantics (trapping, DDC/PCC relocation)">;
1372-
13731359
def FeatureVendorXCheri : RISCVExtension<0, 0, "Implements CHERI extension">;
13741360

13751361
def HasCheri : Predicate<"Subtarget->hasVendorXCheri()">,

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -672,8 +672,7 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
672672
setOperationAction(ISD::GlobalTLSAddress, CLenVT, Custom);
673673
setOperationAction(ISD::ADDRSPACECAST, CLenVT, Custom);
674674
setOperationAction(ISD::ADDRSPACECAST, XLenVT, Custom);
675-
if (Subtarget.hasCheriISAv9Semantics() &&
676-
!RISCVABI::isCheriPureCapABI(Subtarget.getTargetABI())) {
675+
if (!RISCVABI::isCheriPureCapABI(Subtarget.getTargetABI())) {
677676
setOperationAction(ISD::PTRTOINT, XLenVT, Custom);
678677
setOperationAction(ISD::INTTOPTR, CLenVT, Custom);
679678
}
@@ -6909,8 +6908,7 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
69096908
case ISD::INTTOPTR: {
69106909
SDValue Op0 = Op.getOperand(0);
69116910
if (Op.getValueType().isFatPointer()) {
6912-
assert(Subtarget.hasCheriISAv9Semantics() &&
6913-
!RISCVABI::isCheriPureCapABI(Subtarget.getTargetABI()));
6911+
assert(!RISCVABI::isCheriPureCapABI(Subtarget.getTargetABI()));
69146912
if (isNullConstant(Op0)) {
69156913
// Do not custom lower (inttoptr 0) here as that is the canonical
69166914
// representation of capability NULL, and expanding it here disables
@@ -6936,8 +6934,7 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
69366934
case ISD::PTRTOINT: {
69376935
SDValue Op0 = Op.getOperand(0);
69386936
if (Op0.getValueType().isFatPointer()) {
6939-
assert(Subtarget.hasCheriISAv9Semantics() &&
6940-
!RISCVABI::isCheriPureCapABI(Subtarget.getTargetABI()));
6937+
assert(!RISCVABI::isCheriPureCapABI(Subtarget.getTargetABI()));
69416938
// In purecap ptrtoint is lowered to an address read using a tablegen
69426939
// pattern, but for hybrid mode we need to emit the expansion here as
69436940
// CToPtr is no longer part of ISAv9.
@@ -10064,22 +10061,15 @@ SDValue RISCVTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
1006410061
Index);
1006510062
}
1006610063
case Intrinsic::cheri_cap_from_pointer:
10067-
// Expand CFromPtr if the dedicated instruction has been removed.
10068-
if (Subtarget.hasCheriISAv9Semantics()) {
10069-
return emitCFromPtrReplacement(DAG, DL, Op.getOperand(1),
10070-
Op.getOperand(2), Op.getValueType(),
10071-
XLenVT);
10072-
}
10073-
break;
10064+
// Expand CFromPtr since the dedicated instruction has been removed.
10065+
return emitCFromPtrReplacement(DAG, DL, Op.getOperand(1), Op.getOperand(2),
10066+
Op.getValueType(), XLenVT);
1007410067
case Intrinsic::cheri_cap_to_pointer:
10075-
// Expand CToPtr if the dedicated instruction has been removed.
10076-
if (Subtarget.hasCheriISAv9Semantics()) {
10077-
// NB: DDC/PCC relocation has been removed, so we no longer subtract the
10078-
// base of the authorizing capability. This is consistent with the
10079-
// behaviour of Morello's CVT instruction when CCTLR.DDCBO is off.
10080-
return emitCToPtrReplacement(DAG, DL, Op->getOperand(2), XLenVT);
10081-
}
10082-
break;
10068+
// Expand CToPtr since the dedicated instruction has been removed.
10069+
// NB: DDC/PCC relocation has been removed, so we no longer subtract the
10070+
// base of the authorizing capability. This is consistent with the
10071+
// behaviour of Morello's CVT instruction when CCTLR.DDCBO is off.
10072+
return emitCToPtrReplacement(DAG, DL, Op->getOperand(2), XLenVT);
1008310073
case Intrinsic::thread_pointer: {
1008410074
MCPhysReg PhysReg = RISCVABI::isCheriPureCapABI(Subtarget.getTargetABI())
1008510075
? RISCV::C4 : RISCV::X4;

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,39 +1814,7 @@ bool RISCVInstrInfo::isSetBoundsInstr(const MachineInstr &I,
18141814
}
18151815

18161816
bool RISCVInstrInfo::isGuaranteedNotToTrap(const llvm::MachineInstr &MI) const {
1817-
const RISCVSubtarget &ST = MI.getMF()->getSubtarget<RISCVSubtarget>();
1818-
// TODO: This function can be removed once ISAv8 semantics are no longer
1819-
// supported and the tablegen definitions have been updated to remove the
1820-
// mayTrap/@traps_if_sealed flags.
1821-
if (ST.hasCheriISAv9Semantics()) {
1822-
// All these instructions were changed to non-trapping.
1823-
switch (MI.getOpcode()) {
1824-
case RISCV::CAndPerm:
1825-
case RISCV::CBuildCap:
1826-
case RISCV::CCopyType:
1827-
case RISCV::CCSeal:
1828-
case RISCV::CFromPtr:
1829-
case RISCV::CIncOffset:
1830-
case RISCV::CIncOffsetImm:
1831-
case RISCV::CSeal:
1832-
case RISCV::CSealEntry:
1833-
case RISCV::CSetAddr:
1834-
case RISCV::CSetBounds:
1835-
case RISCV::CSetBoundsExact:
1836-
case RISCV::CSetBoundsImm:
1837-
case RISCV::CSetFlags:
1838-
case RISCV::CSetHigh:
1839-
case RISCV::CSetOffset:
1840-
case RISCV::CToPtr:
1841-
case RISCV::CUnseal:
1842-
return true;
1843-
default:
1844-
llvm_unreachable("Unexpected instruction in isGuaranteedNotToTrap");
1845-
return false;
1846-
}
1847-
}
1848-
if (isGuaranteedValidSetBounds(MI))
1849-
return true;
1817+
llvm_unreachable("Should not be called for any CHERI-RISC-V instructions");
18501818
return false;
18511819
}
18521820

0 commit comments

Comments
 (0)