From d9bf74f244eff2ca51ee5e11e7b8d0e6d00a01ac Mon Sep 17 00:00:00 2001 From: Alex Richardson Date: Fri, 12 May 2023 13:35:55 -0700 Subject: [PATCH] [InstSimplify] Add basic fold for @llvm.cheri.cap.flags.set If we are setting the same value we just read we can simplify the sequence to just the original argument. --- llvm/lib/Analysis/InstructionSimplify.cpp | 5 +++++ .../test/Transforms/InstSimplify/cheri-intrinsics-get-set.ll | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 38a7e53f9498..3cc428c12ebb 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -6149,6 +6149,11 @@ static Value *simplifyBinaryIntrinsic(Function *F, Value *Op0, Value *Op1, return Op0; } break; + case Intrinsic::cheri_cap_flags_set: + if (match(Op1, + m_Intrinsic(m_Specific(Op0)))) + return Op0; + break; case Intrinsic::cheri_cap_offset_set: case Intrinsic::cheri_cap_address_set: { Value *Base = getBasePtrIgnoringCapabilityAddressManipulation(Op0, Q.DL); diff --git a/llvm/test/Transforms/InstSimplify/cheri-intrinsics-get-set.ll b/llvm/test/Transforms/InstSimplify/cheri-intrinsics-get-set.ll index a6175798fcde..43ac026667eb 100644 --- a/llvm/test/Transforms/InstSimplify/cheri-intrinsics-get-set.ll +++ b/llvm/test/Transforms/InstSimplify/cheri-intrinsics-get-set.ll @@ -21,9 +21,7 @@ define i8 addrspace(200)* @fold_set_of_get(i8 addrspace(200)* %arg) nounwind { ; ; FLAGS-LABEL: define {{[^@]+}}@fold_set_of_get ; FLAGS-SAME: (i8 addrspace(200)* [[ARG:%.*]]) addrspace(200) #[[ATTR0:[0-9]+]] { -; FLAGS-NEXT: [[VALUE:%.*]] = tail call i64 @llvm.cheri.cap.flags.get.i64(i8 addrspace(200)* [[ARG]]) -; FLAGS-NEXT: [[RET:%.*]] = tail call i8 addrspace(200)* @llvm.cheri.cap.flags.set.i64(i8 addrspace(200)* [[ARG]], i64 [[VALUE]]) -; FLAGS-NEXT: ret i8 addrspace(200)* [[RET]] +; FLAGS-NEXT: ret i8 addrspace(200)* [[ARG]] ; ; HIGH-LABEL: define {{[^@]+}}@fold_set_of_get ; HIGH-SAME: (i8 addrspace(200)* [[ARG:%.*]]) addrspace(200) #[[ATTR0:[0-9]+]] {