diff --git a/llvm/include/llvm/IR/IntrinsicsVE.td b/llvm/include/llvm/IR/IntrinsicsVE.td --- a/llvm/include/llvm/IR/IntrinsicsVE.td +++ b/llvm/include/llvm/IR/IntrinsicsVE.td @@ -1,4 +1,10 @@ // Define intrinsics written by hand +// VEL Intrinsic instructions. +let TargetPrefix = "ve" in { + def int_ve_vl_svob : GCCBuiltin<"__builtin_ve_vl_svob">, + Intrinsic<[], [], [IntrHasSideEffects]>; +} + // Define intrinsics automatically generated include "llvm/IR/IntrinsicsVEVL.gen.td" diff --git a/llvm/lib/Target/VE/VEInstrIntrinsicVL.td b/llvm/lib/Target/VE/VEInstrIntrinsicVL.td --- a/llvm/lib/Target/VE/VEInstrIntrinsicVL.td +++ b/llvm/lib/Target/VE/VEInstrIntrinsicVL.td @@ -2,6 +2,9 @@ // Define intrinsics written by hand +// SVOB pattern. +def : Pat<(int_ve_vl_svob), (SVOB)>; + // The lsv and lvs patterns def : Pat<(int_ve_vl_lsv_vvss v256f64:$pt, i32:$sy, i64:$sz), (LSVrr_v (INSERT_SUBREG (i64 (IMPLICIT_DEF)), i32:$sy, sub_i32), diff --git a/llvm/test/CodeGen/VE/VELIntrinsics/svob.ll b/llvm/test/CodeGen/VE/VELIntrinsics/svob.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/VE/VELIntrinsics/svob.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s + +;;; Test set vector out-of-order memory access boundary intrinsic instructions +;;; +;;; Note: +;;; We test SVOB instruction. + +; Function Attrs: nounwind +define fastcc void @svob_svob() { +; CHECK-LABEL: svob_svob: +; CHECK: # %bb.0: +; CHECK-NEXT: svob +; CHECK-NEXT: b.l.t (, %s10) + tail call void @llvm.ve.vl.svob() + ret void +} + +; Function Attrs: nounwind +declare void @llvm.ve.vl.svob()