diff --git a/llvm/include/llvm/IR/IntrinsicsPowerPC.td b/llvm/include/llvm/IR/IntrinsicsPowerPC.td --- a/llvm/include/llvm/IR/IntrinsicsPowerPC.td +++ b/llvm/include/llvm/IR/IntrinsicsPowerPC.td @@ -35,6 +35,8 @@ def int_ppc_sync : Intrinsic<[], [], []>; // lwsync is sync 1 def int_ppc_lwsync : Intrinsic<[], [], []>; + // eieio instruction + def int_ppc_eieio : Intrinsic<[],[],[]>; // Intrinsics used to generate ctr-based loops. These should only be // generated by the PowerPC backend! diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.td b/llvm/lib/Target/PowerPC/PPCInstrInfo.td --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.td +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.td @@ -2325,10 +2325,15 @@ } } +// We used to have EIEIO as value but E[0-9A-Z] is a reserved name +def EnforceIEIO : XForm_24_eieio<31, 854, (outs), (ins), + "eieio", IIC_LdStLoad, []>; + def : Pat<(int_ppc_sync), (SYNC 0)>, Requires<[HasSYNC]>; def : Pat<(int_ppc_lwsync), (SYNC 1)>, Requires<[HasSYNC]>; def : Pat<(int_ppc_sync), (MSYNC)>, Requires<[HasOnlyMSYNC]>; def : Pat<(int_ppc_lwsync), (MSYNC)>, Requires<[HasOnlyMSYNC]>; +def : Pat<(int_ppc_eieio), (EnforceIEIO)>; //===----------------------------------------------------------------------===// // PPC32 Arithmetic Instructions. @@ -4176,10 +4181,6 @@ def ICBI : XForm_1a<31, 982, (outs), (ins memrr:$src), "icbi $src", IIC_LdStICBI, []>; -// We used to have EIEIO as value but E[0-9A-Z] is a reserved name -def EnforceIEIO : XForm_24_eieio<31, 854, (outs), (ins), - "eieio", IIC_LdStLoad, []>; - def WAIT : XForm_24_sync<31, 30, (outs), (ins i32imm:$L), "wait $L", IIC_LdStLoad, []>; diff --git a/llvm/test/CodeGen/PowerPC/eieio.ll b/llvm/test/CodeGen/PowerPC/eieio.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/eieio.ll @@ -0,0 +1,15 @@ +; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu < %s \ +; RUN: -verify-machineinstrs -ppc-asm-full-reg-names \ +; RUN: -ppc-vsr-nums-as-vr | FileCheck %s + +define void @eieio_test() { +; CHECK-LABEL: @eieio_test +; CHECK: eieio +; CHECK-NEXT: blr + +entry: + tail call void @llvm.ppc.eieio() + ret void +} + +declare void @llvm.ppc.eieio()