mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-12 05:40:30 +00:00
[SystemZ] Mark vector immediate load instructions with useful flags.
Vector immediate load instructions should have the isAsCheapAsAMove, isMoveImm and isReMaterializable flags set. With them, these instruction will get hoisted out of loops. Review: Ulrich Weigand git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292790 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9c3e633489
commit
d7599ee3b1
@ -56,6 +56,9 @@ def : VectorExtractSubreg<v4i32, VLGVF>;
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
let Predicates = [FeatureVector] in {
|
||||
let hasSideEffects = 0, isAsCheapAsAMove = 1, isMoveImm = 1,
|
||||
isReMaterializable = 1 in {
|
||||
|
||||
// Generate byte mask.
|
||||
def VZERO : InherentVRIa<"vzero", 0xE744, 0>;
|
||||
def VONE : InherentVRIa<"vone", 0xE744, 0xffff>;
|
||||
@ -68,6 +71,14 @@ let Predicates = [FeatureVector] in {
|
||||
def VGMF : BinaryVRIb<"vgmf", 0xE746, z_rotate_mask, v128f, 2>;
|
||||
def VGMG : BinaryVRIb<"vgmg", 0xE746, z_rotate_mask, v128g, 3>;
|
||||
|
||||
// Replicate immediate.
|
||||
def VREPI : UnaryVRIaGeneric<"vrepi", 0xE745, imm32sx16>;
|
||||
def VREPIB : UnaryVRIa<"vrepib", 0xE745, z_replicate, v128b, imm32sx16, 0>;
|
||||
def VREPIH : UnaryVRIa<"vrepih", 0xE745, z_replicate, v128h, imm32sx16, 1>;
|
||||
def VREPIF : UnaryVRIa<"vrepif", 0xE745, z_replicate, v128f, imm32sx16, 2>;
|
||||
def VREPIG : UnaryVRIa<"vrepig", 0xE745, z_replicate, v128g, imm32sx16, 3>;
|
||||
}
|
||||
|
||||
// Load element immediate.
|
||||
//
|
||||
// We want these instructions to be used ahead of VLVG* where possible.
|
||||
@ -86,13 +97,6 @@ let Predicates = [FeatureVector] in {
|
||||
def VLEIG : TernaryVRIa<"vleig", 0xE742, z_vector_insert,
|
||||
v128g, v128g, imm64sx16, imm32zx1>;
|
||||
}
|
||||
|
||||
// Replicate immediate.
|
||||
def VREPI : UnaryVRIaGeneric<"vrepi", 0xE745, imm32sx16>;
|
||||
def VREPIB : UnaryVRIa<"vrepib", 0xE745, z_replicate, v128b, imm32sx16, 0>;
|
||||
def VREPIH : UnaryVRIa<"vrepih", 0xE745, z_replicate, v128h, imm32sx16, 1>;
|
||||
def VREPIF : UnaryVRIa<"vrepif", 0xE745, z_replicate, v128f, imm32sx16, 2>;
|
||||
def VREPIG : UnaryVRIa<"vrepig", 0xE745, z_replicate, v128g, imm32sx16, 3>;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -855,8 +855,8 @@ def : InstRW<[VecXsPm], (instregex "VZERO$")>;
|
||||
def : InstRW<[VecXsPm], (instregex "VONE$")>;
|
||||
def : InstRW<[VecXsPm], (instregex "VGBM$")>;
|
||||
def : InstRW<[VecXsPm], (instregex "VGM(B|F|G|H)?$")>;
|
||||
def : InstRW<[VecXsPm], (instregex "VLEI(B|F|G|H)$")>;
|
||||
def : InstRW<[VecXsPm], (instregex "VREPI(B|F|G|H)?$")>;
|
||||
def : InstRW<[VecXsPm], (instregex "VLEI(B|F|G|H)$")>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Vector: Loads
|
||||
|
Loading…
x
Reference in New Issue
Block a user