Skip to content

Commit d9e21a9

Browse files
authored
[PowerPC] Add DMF basic builtins (llvm#145372)
Add support for PPC Dense Math basic builtins dmsetdmrz, dmmr, dmxor.
1 parent 09f7cab commit d9e21a9

File tree

5 files changed

+48
-0
lines changed

5 files changed

+48
-0
lines changed

clang/include/clang/Basic/BuiltinsPPC.def

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,6 +1092,12 @@ UNALIASED_CUSTOM_BUILTIN(mma_dmxvi8gerx4spp, "vW1024*W256V", true,
10921092
"mma,paired-vector-memops")
10931093
UNALIASED_CUSTOM_BUILTIN(mma_pmdmxvi8gerx4spp, "vW1024*W256Vi255i15i15", true,
10941094
"mma,paired-vector-memops")
1095+
UNALIASED_CUSTOM_BUILTIN(mma_dmsetdmrz, "vW1024*", false,
1096+
"mma,isa-future-instructions")
1097+
UNALIASED_CUSTOM_BUILTIN(mma_dmmr, "vW1024*W1024*", false,
1098+
"mma,isa-future-instructions")
1099+
UNALIASED_CUSTOM_BUILTIN(mma_dmxor, "vW1024*W1024*", true,
1100+
"mma,isa-future-instructions")
10951101

10961102
// MMA builtins with positive/negative multiply/accumulate.
10971103
UNALIASED_CUSTOM_MMA_BUILTIN(mma_xvf16ger2, "vW512*VV",

clang/lib/CodeGen/TargetBuiltins/PPC.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,6 +1151,11 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
11511151
Value *Acc = Builder.CreateLoad(Addr);
11521152
CallOps.push_back(Acc);
11531153
}
1154+
if (BuiltinID == PPC::BI__builtin_mma_dmmr ||
1155+
BuiltinID == PPC::BI__builtin_mma_dmxor) {
1156+
Address Addr = EmitPointerWithAlignment(E->getArg(1));
1157+
Ops[1] = Builder.CreateLoad(Addr);
1158+
}
11541159
for (unsigned i=1; i<Ops.size(); i++)
11551160
CallOps.push_back(Ops[i]);
11561161
llvm::Function *F = CGM.getIntrinsic(ID);

clang/test/CodeGen/PowerPC/builtins-ppc-dmf.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,19 @@ void test_pmdmxvi8gerx4spp(unsigned char *vdmrp, unsigned char *vpp, vector unsi
9292
__builtin_mma_pmdmxvi8gerx4spp(&vdmr, vp, vc, 0, 0, 0);
9393
*((__dmr1024 *)resp) = vdmr;
9494
}
95+
96+
// CHECK-LABEL: @test_dmf_basic
97+
// CHECK-NEXT: entry:
98+
// CHECK-NEXT: [[TMP0:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.dmsetdmrz()
99+
// CHECK-NEXT: [[TMP1:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.dmmr(<1024 x i1> [[TMP0]])
100+
// CHECK-NEXT: store <1024 x i1> [[TMP1]], ptr %res1, align 128
101+
// CHECK-NEXT: [[TMP2:%.*]] = load <1024 x i1>, ptr %res2, align 128
102+
// CHECK-NEXT: [[TMP3:%.*]] = load <1024 x i1>, ptr %p, align 128
103+
// CHECK-NEXT: [[TMP4:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.dmxor(<1024 x i1> [[TMP2]], <1024 x i1> [[TMP3]])
104+
// CHECK-NEXT: store <1024 x i1> [[TMP4]], ptr %res2, align 128
105+
void test_dmf_basic(char *p, char *res1, char *res2) {
106+
__dmr1024 x[2];
107+
__builtin_mma_dmsetdmrz(&x[0]);
108+
__builtin_mma_dmmr((__dmr1024*)res1, &x[0]);
109+
__builtin_mma_dmxor((__dmr1024*)res2, (__dmr1024*)p);
110+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: not %clang_cc1 -triple powerpc64le-unknown-linux-gnu -target-cpu pwr10 \
2+
// RUN: %s -emit-llvm-only 2>&1 | FileCheck %s
3+
4+
__attribute__((target("no-mma")))
5+
void test_mma(unsigned char *vdmrp, unsigned char *vpp, vector unsigned char vc) {
6+
__dmr1024 vdmr = *((__dmr1024 *)vdmrp);
7+
__vector_pair vp = *((__vector_pair *)vpp);
8+
__builtin_mma_dmsetdmrz(&vdmr);
9+
__builtin_mma_dmmr(&vdmr, (__dmr1024*)vpp);
10+
__builtin_mma_dmxor(&vdmr, (__dmr1024*)vpp);
11+
12+
// CHECK: error: '__builtin_mma_dmsetdmrz' needs target feature mma,isa-future-instructions
13+
// CHECK: error: '__builtin_mma_dmmr' needs target feature mma,isa-future-instructions
14+
// CHECK: error: '__builtin_mma_dmxor' needs target feature mma,isa-future-instructions
15+
}

clang/test/CodeGen/PowerPC/ppc-future-mma-builtin-err.c renamed to clang/test/CodeGen/PowerPC/ppc-dmf-mma-builtin-err.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,17 @@ void test_mma(unsigned char *vdmrp, unsigned char *vpp, vector unsigned char vc)
1111
__builtin_mma_pmdmxvi8gerx4pp(&vdmr, vp, vc, 0, 0, 0);
1212
__builtin_mma_dmxvi8gerx4spp(&vdmr, vp, vc);
1313
__builtin_mma_pmdmxvi8gerx4spp(&vdmr, vp, vc, 0, 0, 0);
14+
__builtin_mma_dmsetdmrz(&vdmr);
15+
__builtin_mma_dmmr(&vdmr, (__dmr1024*)vpp);
16+
__builtin_mma_dmxor(&vdmr, (__dmr1024*)vpp);
1417

1518
// CHECK: error: '__builtin_mma_dmxvi8gerx4' needs target feature mma,paired-vector-memops
1619
// CHECK: error: '__builtin_mma_pmdmxvi8gerx4' needs target feature mma,paired-vector-memops
1720
// CHECK: error: '__builtin_mma_dmxvi8gerx4pp' needs target feature mma,paired-vector-memops
1821
// CHECK: error: '__builtin_mma_pmdmxvi8gerx4pp' needs target feature mma,paired-vector-memops
1922
// CHECK: error: '__builtin_mma_dmxvi8gerx4spp' needs target feature mma,paired-vector-memops
2023
// CHECK: error: '__builtin_mma_pmdmxvi8gerx4spp' needs target feature mma,paired-vector-memops
24+
// CHECK: error: '__builtin_mma_dmsetdmrz' needs target feature mma,isa-future-instructions
25+
// CHECK: error: '__builtin_mma_dmmr' needs target feature mma,isa-future-instructions
26+
// CHECK: error: '__builtin_mma_dmxor' needs target feature mma,isa-future-instructions
2127
}

0 commit comments

Comments
 (0)