Index: llvm/include/llvm/IR/IntrinsicsPowerPC.td =================================================================== --- llvm/include/llvm/IR/IntrinsicsPowerPC.td +++ llvm/include/llvm/IR/IntrinsicsPowerPC.td @@ -33,6 +33,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! Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td =================================================================== --- llvm/lib/Target/PowerPC/PPCInstrInfo.td +++ llvm/lib/Target/PowerPC/PPCInstrInfo.td @@ -2201,10 +2201,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. @@ -4051,10 +4056,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, []>; Index: llvm/test/CodeGen/PowerPC/eieio.ll =================================================================== --- /dev/null +++ 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 + +; Function Attrs: nounwind +define void @eieio_test() { +entry: + tail call void @llvm.ppc.eieio() +; CHECK-LABEL: @eieio_test +; CHECK: eieio +; CHECK-NEXT: blr +ret void +} + +declare void @llvm.ppc.eieio()