Skip to content

Commit 0f83711

Browse files
authored
Merge pull request #29 from sx-aurora-dev/feature/cr-intrin
Feature/cr intrin
2 parents 17e590e + 6202490 commit 0f83711

File tree

12 files changed

+729
-346
lines changed

12 files changed

+729
-346
lines changed

clang/include/clang/Basic/BuiltinsVE.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
// The format of this database matches clang/Basic/Builtins.def.
1515

16-
BUILTIN(__builtin_ve_vl_svob, "v", "n")
1716
BUILTIN(__builtin_ve_vl_pack_f32p, "ULifC*fC*", "n")
1817
BUILTIN(__builtin_ve_vl_pack_f32a, "ULifC*", "n")
1918

clang/include/clang/Basic/BuiltinsVEVL.gen.def

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,3 +1247,11 @@ BUILTIN(__builtin_ve_vl_negm_MM, "V512bV512b", "n")
12471247
BUILTIN(__builtin_ve_vl_pcvm_sml, "LUiV256bUi", "n")
12481248
BUILTIN(__builtin_ve_vl_lzvm_sml, "LUiV256bUi", "n")
12491249
BUILTIN(__builtin_ve_vl_tovm_sml, "LUiV256bUi", "n")
1250+
BUILTIN(__builtin_ve_vl_lcr_sss, "LUiLUiLUi", "n")
1251+
BUILTIN(__builtin_ve_vl_scr_sss, "vLUiLUiLUi", "n")
1252+
BUILTIN(__builtin_ve_vl_tscr_ssss, "LUiLUiLUiLUi", "n")
1253+
BUILTIN(__builtin_ve_vl_fidcr_sss, "LUiLUiUi", "n")
1254+
BUILTIN(__builtin_ve_vl_fencei, "v", "n")
1255+
BUILTIN(__builtin_ve_vl_fencem_s, "vUi", "n")
1256+
BUILTIN(__builtin_ve_vl_fencec_s, "vUi", "n")
1257+
BUILTIN(__builtin_ve_vl_svob, "v", "n")

clang/lib/Headers/velintrin.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ enum VShuffleCodes {
5959
#include <velintrin_gen.h>
6060
#include <velintrin_approx.h>
6161

62-
#define _vel_svob() __builtin_ve_vl_svob()
63-
6462
// pack
6563

6664
#define _vel_pack_f32p __builtin_ve_vl_pack_f32p

clang/lib/Headers/velintrin_gen.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,3 +1247,11 @@
12471247
#define _vel_pcvm_sml __builtin_ve_vl_pcvm_sml
12481248
#define _vel_lzvm_sml __builtin_ve_vl_lzvm_sml
12491249
#define _vel_tovm_sml __builtin_ve_vl_tovm_sml
1250+
#define _vel_lcr_sss __builtin_ve_vl_lcr_sss
1251+
#define _vel_scr_sss __builtin_ve_vl_scr_sss
1252+
#define _vel_tscr_ssss __builtin_ve_vl_tscr_ssss
1253+
#define _vel_fidcr_sss __builtin_ve_vl_fidcr_sss
1254+
#define _vel_fencei __builtin_ve_vl_fencei
1255+
#define _vel_fencem_s __builtin_ve_vl_fencem_s
1256+
#define _vel_fencec_s __builtin_ve_vl_fencec_s
1257+
#define _vel_svob __builtin_ve_vl_svob

llvm/include/llvm/IR/IntrinsicsVE.td

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
// VEL Intrinsic instructions.
44
let TargetPrefix = "ve" in {
5-
def int_ve_vl_svob : GCCBuiltin<"__builtin_ve_vl_svob">,
6-
Intrinsic<[], [], [IntrHasSideEffects]>;
7-
85
def int_ve_vl_pack_f32p : GCCBuiltin<"__builtin_ve_vl_pack_f32p">,
96
Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_ptr_ty],
107
[IntrReadMem]>;

llvm/include/llvm/IR/IntrinsicsVEVL.gen.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,3 +1247,11 @@ let TargetPrefix = "ve" in def int_ve_vl_negm_MM : GCCBuiltin<"__builtin_ve_vl_n
12471247
let TargetPrefix = "ve" in def int_ve_vl_pcvm_sml : GCCBuiltin<"__builtin_ve_vl_pcvm_sml">, Intrinsic<[LLVMType<i64>], [LLVMType<v256i1>, LLVMType<i32>], [IntrNoMem]>;
12481248
let TargetPrefix = "ve" in def int_ve_vl_lzvm_sml : GCCBuiltin<"__builtin_ve_vl_lzvm_sml">, Intrinsic<[LLVMType<i64>], [LLVMType<v256i1>, LLVMType<i32>], [IntrNoMem]>;
12491249
let TargetPrefix = "ve" in def int_ve_vl_tovm_sml : GCCBuiltin<"__builtin_ve_vl_tovm_sml">, Intrinsic<[LLVMType<i64>], [LLVMType<v256i1>, LLVMType<i32>], [IntrNoMem]>;
1250+
let TargetPrefix = "ve" in def int_ve_vl_lcr_sss : GCCBuiltin<"__builtin_ve_vl_lcr_sss">, Intrinsic<[LLVMType<i64>], [LLVMType<i64>, LLVMType<i64>], [IntrNoMem]>;
1251+
let TargetPrefix = "ve" in def int_ve_vl_scr_sss : GCCBuiltin<"__builtin_ve_vl_scr_sss">, Intrinsic<[], [LLVMType<i64>, LLVMType<i64>, LLVMType<i64>], [IntrNoMem, IntrHasSideEffects]>;
1252+
let TargetPrefix = "ve" in def int_ve_vl_tscr_ssss : GCCBuiltin<"__builtin_ve_vl_tscr_ssss">, Intrinsic<[LLVMType<i64>], [LLVMType<i64>, LLVMType<i64>, LLVMType<i64>], [IntrNoMem, IntrHasSideEffects]>;
1253+
let TargetPrefix = "ve" in def int_ve_vl_fidcr_sss : GCCBuiltin<"__builtin_ve_vl_fidcr_sss">, Intrinsic<[LLVMType<i64>], [LLVMType<i64>, LLVMType<i32>], [IntrNoMem, IntrHasSideEffects]>;
1254+
let TargetPrefix = "ve" in def int_ve_vl_fencei : GCCBuiltin<"__builtin_ve_vl_fencei">, Intrinsic<[], [], [IntrNoMem, IntrHasSideEffects]>;
1255+
let TargetPrefix = "ve" in def int_ve_vl_fencem_s : GCCBuiltin<"__builtin_ve_vl_fencem_s">, Intrinsic<[], [LLVMType<i32>], [IntrNoMem, IntrHasSideEffects]>;
1256+
let TargetPrefix = "ve" in def int_ve_vl_fencec_s : GCCBuiltin<"__builtin_ve_vl_fencec_s">, Intrinsic<[], [LLVMType<i32>], [IntrNoMem, IntrHasSideEffects]>;
1257+
let TargetPrefix = "ve" in def int_ve_vl_svob : GCCBuiltin<"__builtin_ve_vl_svob">, Intrinsic<[], [], [IntrNoMem, IntrHasSideEffects]>;

llvm/lib/Target/VE/VEInstrInfo.td

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -960,32 +960,46 @@ multiclass BCRm<string opcStr, string opcStrAt, string opcStrAf, bits<8> opc,
960960
// e.g. LCR
961961
let hasSideEffects = 1 in
962962
multiclass LOADCRm<string opcStr, bits<8>opc, RegisterClass RC> {
963-
def rr : RR<opc, (outs RC:$sx), (ins RC:$sz, RC:$sy),
963+
def rr : RR<opc, (outs RC:$sx), (ins RC:$sy, RC:$sz),
964964
!strconcat(opcStr, " $sx, $sy, $sz")>;
965-
let cy = 0 in def ri : RR<opc, (outs RC:$sx), (ins RC:$sz, simm7:$sy),
965+
let cy = 0 in def ir : RR<opc, (outs RC:$sx), (ins simm7:$sy, RC:$sz),
966966
!strconcat(opcStr, " $sx, $sy, $sz")>;
967-
let cz = 0 in def zr : RR<opc, (outs RC:$sx), (ins zero:$sz, RC:$sy),
967+
let cz = 0 in def rz : RR<opc, (outs RC:$sx), (ins RC:$sy, zero:$sz),
968968
!strconcat(opcStr, " $sx, $sy, $sz")>;
969969
let cy = 0, cz = 0 in
970-
def zi : RR<opc, (outs RC:$sx), (ins zero:$sz, simm7:$sy),
970+
def iz : RR<opc, (outs RC:$sx), (ins simm7:$sy, zero:$sz),
971971
!strconcat(opcStr, " $sx, $sy, $sz")>;
972972
}
973973

974974
// Multiclass for communication register instructions.
975975
// e.g. SCR
976976
let hasSideEffects = 1 in
977977
multiclass STORECRm<string opcStr, bits<8>opc, RegisterClass RC> {
978-
def rr : RR<opc, (outs), (ins RC:$sz, RC:$sy, RC:$sx),
978+
def rrr : RR<opc, (outs), (ins RC:$sy, RC:$sz, RC:$sx),
979979
!strconcat(opcStr, " $sx, $sy, $sz")>;
980-
let cy = 0 in def ri : RR<opc, (outs), (ins RC:$sz, simm7:$sy, RC:$sx),
981-
!strconcat(opcStr, " $sx, $sy, $sz")>;
982-
let cz = 0 in def zr : RR<opc, (outs), (ins zero:$sz, RC:$sy, RC:$sx),
983-
!strconcat(opcStr, " $sx, $sy, $sz")>;
980+
let cy = 0 in def irr : RR<opc, (outs), (ins simm7:$sy, RC:$sz, RC:$sx),
981+
!strconcat(opcStr, " $sx, $sy, $sz")>;
982+
let cz = 0 in def rzr : RR<opc, (outs), (ins RC:$sy, zero:$sz, RC:$sx),
983+
!strconcat(opcStr, " $sx, $sy, $sz")>;
984984
let cy = 0, cz = 0 in
985-
def zi : RR<opc, (outs), (ins zero:$sz, simm7:$sy, RC:$sx),
986-
!strconcat(opcStr, " $sx, $sy, $sz")>;
985+
def izr : RR<opc, (outs), (ins simm7:$sy, zero:$sz, RC:$sx),
986+
!strconcat(opcStr, " $sx, $sy, $sz")>;
987+
}
988+
989+
let hasSideEffects = 1, Constraints = "$sx = $sx_in", DisableEncoding = "$sx_in" in
990+
multiclass TSCRm<string opcStr, bits<8>opc, RegisterClass RC> {
991+
def rrr : RR<opc, (outs RC:$sx), (ins RC:$sy, RC:$sz, RC:$sx_in),
992+
!strconcat(opcStr, " $sx, $sy, $sz")>;
993+
let cy = 0 in def irr : RR<opc, (outs RC:$sx), (ins simm7:$sy, RC:$sz, RC:$sx_in),
994+
!strconcat(opcStr, " $sx, $sy, $sz")>;
995+
let cz = 0 in def rzr : RR<opc, (outs RC:$sx), (ins RC:$sy, zero:$sz, RC:$sx_in),
996+
!strconcat(opcStr, " $sx, $sy, $sz")>;
997+
let cy = 0, cz = 0 in
998+
def izr : RR<opc, (outs RC:$sx), (ins simm7:$sy, zero:$sz, RC:$sx_in),
999+
!strconcat(opcStr, " $sx, $sy, $sz")>;
9871000
}
9881001

1002+
9891003
// Multiclass for communication register instructions.
9901004
// e.g. FIDCR
9911005
let cz = 0, hasSideEffects = 1 in
@@ -1657,7 +1671,7 @@ defm LCR : LOADCRm<"lcr", 0x40, I64>;
16571671
defm SCR : STORECRm<"scr", 0x50, I64>;
16581672

16591673
// Section 8.19.11 - TSCR (Test & Set Communication Register)
1660-
defm TSCR : LOADCRm<"tscr", 0x41, I64>;
1674+
defm TSCR : TSCRm<"tscr", 0x41, I64>;
16611675

16621676
// Section 8.19.12 - FIDCR (Fetch & Increment/Decrement CR)
16631677
defm FIDCR : FIDCRm<"fidcr", 0x51, I64>;

llvm/lib/Target/VE/VEInstrIntrinsicVL.gen.td

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,3 +1638,21 @@ def : Pat<(int_ve_vl_negm_MM v512i1:$vmy), (NEGMy v512i1:$vmy)>;
16381638
def : Pat<(int_ve_vl_pcvm_sml v256i1:$vmy, i32:$vl), (PCVMml v256i1:$vmy, i32:$vl)>;
16391639
def : Pat<(int_ve_vl_lzvm_sml v256i1:$vmy, i32:$vl), (LZVMml v256i1:$vmy, i32:$vl)>;
16401640
def : Pat<(int_ve_vl_tovm_sml v256i1:$vmy, i32:$vl), (TOVMml v256i1:$vmy, i32:$vl)>;
1641+
def : Pat<(int_ve_vl_lcr_sss i64:$sy, i64:$sz), (LCRrr i64:$sy, i64:$sz)>;
1642+
def : Pat<(int_ve_vl_lcr_sss i64:$sy, zero:$Z), (LCRrz i64:$sy, (LO7 $Z))>;
1643+
def : Pat<(int_ve_vl_lcr_sss uimm7:$N, i64:$sz), (LCRir (ULO7 $N), i64:$sz)>;
1644+
def : Pat<(int_ve_vl_lcr_sss uimm7:$N, zero:$Z), (LCRiz (ULO7 $N), (LO7 $Z))>;
1645+
def : Pat<(int_ve_vl_scr_sss i64:$sx, i64:$sy, i64:$sz), (SCRrrr i64:$sy, i64:$sz, i64:$sx)>;
1646+
def : Pat<(int_ve_vl_scr_sss i64:$sx, i64:$sy, zero:$Z), (SCRrzr i64:$sy, (LO7 $Z), i64:$sx)>;
1647+
def : Pat<(int_ve_vl_scr_sss i64:$sx, uimm7:$N, i64:$sz), (SCRirr (ULO7 $N), i64:$sz, i64:$sx)>;
1648+
def : Pat<(int_ve_vl_scr_sss i64:$sx, uimm7:$N, zero:$Z), (SCRizr (ULO7 $N), (LO7 $Z), i64:$sx)>;
1649+
def : Pat<(int_ve_vl_tscr_ssss i64:$sx, i64:$sy, i64:$sz), (TSCRrrr i64:$sy, i64:$sz, i64:$sx)>;
1650+
def : Pat<(int_ve_vl_tscr_ssss i64:$sx, i64:$sy, zero:$Z), (TSCRrzr i64:$sy, (LO7 $Z), i64:$sx)>;
1651+
def : Pat<(int_ve_vl_tscr_ssss i64:$sx, uimm7:$N, i64:$sz), (TSCRirr (ULO7 $N), i64:$sz, i64:$sx)>;
1652+
def : Pat<(int_ve_vl_tscr_ssss i64:$sx, uimm7:$N, zero:$Z), (TSCRizr (ULO7 $N), (LO7 $Z), i64:$sx)>;
1653+
def : Pat<(int_ve_vl_fidcr_sss i64:$sy, uimm3:$I), (FIDCRri i64:$sy, (LO7 $I))>;
1654+
def : Pat<(int_ve_vl_fidcr_sss uimm7:$N, uimm3:$I), (FIDCRii (ULO7 $N), (LO7 $I))>;
1655+
def : Pat<(int_ve_vl_fencei ), (FENCEI )>;
1656+
def : Pat<(int_ve_vl_fencem_s uimm2:$I), (FENCEM (LO7 $I))>;
1657+
def : Pat<(int_ve_vl_fencec_s uimm3:$I), (FENCEC (LO7 $I))>;
1658+
def : Pat<(int_ve_vl_svob ), (SVOB )>;

llvm/lib/Target/VE/VEInstrIntrinsicVL.td

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
/// Intrinsic patterns written by hand.
44

5-
// SVOB pattern.
6-
def : Pat<(int_ve_vl_svob), (SVOB)>;
7-
85
// Pack patterns.
96
def : Pat<(i64 (int_ve_vl_pack_f32p ADDRrii:$addr0, ADDRrii:$addr1)),
107
(ORrr (f2l (LDUrii MEMrii:$addr0)),

0 commit comments

Comments
 (0)