Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 79 additions & 1 deletion llvm/include/llvm/IR/IntrinsicsHexagon.td
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
//
// All Hexagon intrinsics start with "llvm.hexagon.".
let TargetPrefix = "hexagon" in {
/// Hexagon_Intrinsic - Base class for the majority of Hexagon intrinsics.
/// Hexagon_Intrinsic - Base class for majority of Hexagon intrinsics.
class Hexagon_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types,
list<LLVMType> param_types,
list<IntrinsicProperty> properties>
Expand Down Expand Up @@ -435,6 +435,84 @@ def int_hexagon_V6_vmaskedstorenq_128B: Hexagon_custom_vms_Intrinsic_128B;
def int_hexagon_V6_vmaskedstorentq_128B: Hexagon_custom_vms_Intrinsic_128B;
def int_hexagon_V6_vmaskedstorentnq_128B: Hexagon_custom_vms_Intrinsic_128B;

// Carryo
// The script can't autogenerate clang builtins for vaddcarryo/vsubarryo,
// and they are marked in HexagonIset.py as not having intrinsics at all.
// The script could generate intrinsics, but instead of doing intrinsics
// without builtins, just put the intrinsics here.

// tag : V6_vaddcarryo
class Hexagon_custom_v16i32v64i1_v16i32v16i32_Intrinsic<
list<IntrinsicProperty> intr_properties = [IntrNoMem]>
: Hexagon_NonGCC_Intrinsic<
[llvm_v16i32_ty,llvm_v64i1_ty], [llvm_v16i32_ty,llvm_v16i32_ty],
intr_properties>;

// tag : V6_vaddcarryo
class Hexagon_custom_v32i32v128i1_v32i32v32i32_Intrinsic_128B<
list<IntrinsicProperty> intr_properties = [IntrNoMem]>
: Hexagon_NonGCC_Intrinsic<
[llvm_v32i32_ty,llvm_v128i1_ty], [llvm_v32i32_ty,llvm_v32i32_ty],
intr_properties>;

// Pseudo intrinsics for widening vector isntructions that
// get replaced with the real Hexagon instructions during
// instruction lowering.
class Hexagon_widenvec_Intrinsic
: Hexagon_NonGCC_Intrinsic<
[llvm_anyvector_ty],
[LLVMTruncatedType<0>, LLVMTruncatedType<0>],
[IntrNoMem]>;

class Hexagon_non_widenvec_Intrinsic
: Hexagon_NonGCC_Intrinsic<
[llvm_anyvector_ty],
[LLVMMatchType<0>, LLVMMatchType<0>],
[IntrNoMem]>;

// Widening vector add
def int_hexagon_vadd_su: Hexagon_widenvec_Intrinsic;
def int_hexagon_vadd_uu: Hexagon_widenvec_Intrinsic;
def int_hexagon_vadd_ss: Hexagon_widenvec_Intrinsic;
def int_hexagon_vadd_us: Hexagon_widenvec_Intrinsic;


// Widening vector subtract
def int_hexagon_vsub_su: Hexagon_widenvec_Intrinsic;
def int_hexagon_vsub_uu: Hexagon_widenvec_Intrinsic;
def int_hexagon_vsub_ss: Hexagon_widenvec_Intrinsic;
def int_hexagon_vsub_us: Hexagon_widenvec_Intrinsic;

// Widening vector multiply
def int_hexagon_vmpy_su: Hexagon_widenvec_Intrinsic;
def int_hexagon_vmpy_uu: Hexagon_widenvec_Intrinsic;
def int_hexagon_vmpy_ss: Hexagon_widenvec_Intrinsic;
def int_hexagon_vmpy_us: Hexagon_widenvec_Intrinsic;

def int_hexagon_vavgu: Hexagon_non_widenvec_Intrinsic;
def int_hexagon_vavgs: Hexagon_non_widenvec_Intrinsic;

class Hexagon_vasr_Intrinsic
: Hexagon_NonGCC_Intrinsic<
[LLVMSubdivide2VectorType<0>],
[llvm_anyvector_ty, LLVMMatchType<0>, llvm_i32_ty],
[IntrNoMem]>;

def int_hexagon_vasrsat_su: Hexagon_vasr_Intrinsic;
def int_hexagon_vasrsat_uu: Hexagon_vasr_Intrinsic;
def int_hexagon_vasrsat_ss: Hexagon_vasr_Intrinsic;

class Hexagon_widen_vec_scalar_Intrinsic
: Hexagon_NonGCC_Intrinsic<
[llvm_anyvector_ty],
[LLVMTruncatedType<0>, llvm_i32_ty],
[IntrNoMem]>;

// Widening vector scalar multiply
def int_hexagon_vmpy_ub_b: Hexagon_widen_vec_scalar_Intrinsic;
def int_hexagon_vmpy_ub_ub: Hexagon_widen_vec_scalar_Intrinsic;
def int_hexagon_vmpy_uh_uh: Hexagon_widen_vec_scalar_Intrinsic;
def int_hexagon_vmpy_h_h: Hexagon_widen_vec_scalar_Intrinsic;

// Intrinsic for instrumentation based profiling using a custom handler. The
// name of the handler is passed as the first operand to the intrinsic. The
Expand Down
14 changes: 0 additions & 14 deletions llvm/include/llvm/IR/IntrinsicsHexagonDep.td
Original file line number Diff line number Diff line change
Expand Up @@ -491,20 +491,6 @@ class Hexagon_custom_v32i32v128i1_v32i32v32i32v128i1_Intrinsic_128B<
[llvm_v32i32_ty,llvm_v128i1_ty], [llvm_v32i32_ty,llvm_v32i32_ty,llvm_v128i1_ty],
intr_properties>;

// tag : V6_vaddcarryo
class Hexagon_custom_v16i32v64i1_v16i32v16i32_Intrinsic<
list<IntrinsicProperty> intr_properties = [IntrNoMem]>
: Hexagon_NonGCC_Intrinsic<
[llvm_v16i32_ty,llvm_v64i1_ty], [llvm_v16i32_ty,llvm_v16i32_ty],
intr_properties>;

// tag : V6_vaddcarryo
class Hexagon_custom_v32i32v128i1_v32i32v32i32_Intrinsic_128B<
list<IntrinsicProperty> intr_properties = [IntrNoMem]>
: Hexagon_NonGCC_Intrinsic<
[llvm_v32i32_ty,llvm_v128i1_ty], [llvm_v32i32_ty,llvm_v32i32_ty],
intr_properties>;

// tag : V6_vaddcarrysat
class Hexagon_v16i32_v16i32v16i32v64i1_Intrinsic<string GCCIntSuffix,
list<IntrinsicProperty> intr_properties = [IntrNoMem]>
Expand Down
3 changes: 3 additions & 0 deletions llvm/lib/Target/Hexagon/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ add_llvm_target(HexagonCodeGen
HexagonGenMemAbsolute.cpp
HexagonGenMux.cpp
HexagonGenPredicate.cpp
HexagonGenWideningVecFloatInstr.cpp
HexagonGenWideningVecInstr.cpp
HexagonHardwareLoops.cpp
HexagonHazardRecognizer.cpp
HexagonInstrInfo.cpp
Expand All @@ -53,6 +55,7 @@ add_llvm_target(HexagonCodeGen
HexagonNewValueJump.cpp
HexagonOptAddrMode.cpp
HexagonOptimizeSZextends.cpp
HexagonOptShuffleVector.cpp
HexagonPeephole.cpp
HexagonQFPOptimizer.cpp
HexagonRDFOpt.cpp
Expand Down
4 changes: 4 additions & 0 deletions llvm/lib/Target/Hexagon/Hexagon.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ FunctionPass *createHexagonGenInsert();
FunctionPass *createHexagonGenMemAbsolute();
FunctionPass *createHexagonGenMux();
FunctionPass *createHexagonGenPredicate();
FunctionPass *
createHexagonGenWideningVecFloatInstr(const HexagonTargetMachine &);
FunctionPass *createHexagonGenWideningVecInstr(const HexagonTargetMachine &);
FunctionPass *createHexagonHardwareLoops();
FunctionPass *createHexagonISelDag(HexagonTargetMachine &TM,
CodeGenOptLevel OptLevel);
Expand All @@ -102,6 +105,7 @@ FunctionPass *createHexagonMergeActivateWeight();
FunctionPass *createHexagonNewValueJump();
FunctionPass *createHexagonOptAddrMode();
FunctionPass *createHexagonOptimizeSZextends();
FunctionPass *createHexagonOptShuffleVector(const HexagonTargetMachine &);
FunctionPass *createHexagonPacketizer(bool Minimal);
FunctionPass *createHexagonPeephole();
FunctionPass *createHexagonRDFOpt();
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/Hexagon/HexagonGenPredicate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,7 @@ struct PrintRegister {
};

[[maybe_unused]] raw_ostream &operator<<(raw_ostream &OS,
const PrintRegister &PR);
raw_ostream &operator<<(raw_ostream &OS, const PrintRegister &PR) {
const PrintRegister &PR) {
return OS << printReg(PR.Reg.Reg, &PR.TRI, PR.Reg.SubReg);
}

Expand Down
Loading