Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Target/VE/VEInstrInfo.td
Show First 20 Lines • Show All 436 Lines • ▼ Show 20 Lines | |||||
def GetTLSAddr : SDNode<"VEISD::GETTLSADDR", SDT_SPCall, | def GetTLSAddr : SDNode<"VEISD::GETTLSADDR", SDT_SPCall, | ||||
[SDNPHasChain, SDNPOptInGlue, SDNPOutGlue, | [SDNPHasChain, SDNPOptInGlue, SDNPOutGlue, | ||||
SDNPVariadic]>; | SDNPVariadic]>; | ||||
// GETSTACKTOP | // GETSTACKTOP | ||||
def GetStackTop : SDNode<"VEISD::GETSTACKTOP", SDTNone, | def GetStackTop : SDNode<"VEISD::GETSTACKTOP", SDTNone, | ||||
[SDNPHasChain, SDNPSideEffect]>; | [SDNPHasChain, SDNPSideEffect]>; | ||||
// MEMBARRIER | |||||
def MemBarrier : SDNode<"VEISD::MEMBARRIER", SDTNone, | |||||
[SDNPHasChain, SDNPSideEffect]>; | |||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
// VE Flag Conditions | // VE Flag Conditions | ||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
// Note that these values must be kept in sync with the CCOp::CondCode enum | // Note that these values must be kept in sync with the CCOp::CondCode enum | ||||
// values. | // values. | ||||
class CC_VAL<int N> : PatLeaf<(i32 N)>; | class CC_VAL<int N> : PatLeaf<(i32 N)>; | ||||
▲ Show 20 Lines • Show All 1,324 Lines • ▼ Show 20 Lines | |||||
// These calls are needed to probe the stack when allocating more over | // These calls are needed to probe the stack when allocating more over | ||||
// %s8 (%sl - stack limit). | // %s8 (%sl - stack limit). | ||||
let Uses = [SX11], hasSideEffects = 1 in | let Uses = [SX11], hasSideEffects = 1 in | ||||
def GETSTACKTOP : Pseudo<(outs I64:$dst), (ins), | def GETSTACKTOP : Pseudo<(outs I64:$dst), (ins), | ||||
"# GET STACK TOP", | "# GET STACK TOP", | ||||
[(set iPTR:$dst, (GetStackTop))]>; | [(set iPTR:$dst, (GetStackTop))]>; | ||||
// MEMBARRIER | |||||
let hasSideEffects = 1 in | |||||
def MEMBARRIER : Pseudo<(outs), (ins), "# MEMBARRIER", [(MemBarrier)] >; | |||||
//===----------------------------------------------------------------------===// | |||||
// Other patterns | |||||
//===----------------------------------------------------------------------===// | |||||
// SETCC pattern matches | // SETCC pattern matches | ||||
// | // | ||||
// CMP %tmp, lhs, rhs ; compare lhs and rhs | // CMP %tmp, lhs, rhs ; compare lhs and rhs | ||||
// or %res, 0, (0)1 ; initialize by 0 | // or %res, 0, (0)1 ; initialize by 0 | ||||
// CMOV %res, (63)0, %tmp ; set 1 if %tmp is true | // CMOV %res, (63)0, %tmp ; set 1 if %tmp is true | ||||
class setccrr<Instruction INSN> : | class setccrr<Instruction INSN> : | ||||
OutPatFrag<(ops node:$cond, node:$comp), | OutPatFrag<(ops node:$cond, node:$comp), | ||||
▲ Show 20 Lines • Show All 256 Lines • Show Last 20 Lines |