Skip to content

Commit fc5226f

Browse files
committed
dmf basic builtins
1 parent f159774 commit fc5226f

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

clang/include/clang/Basic/BuiltinsPPC.def

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,6 +1146,12 @@ UNALIASED_CUSTOM_BUILTIN(mma_dmxvi8gerx4spp, "vW1024*W256V", true,
11461146
"mma,paired-vector-memops")
11471147
UNALIASED_CUSTOM_BUILTIN(mma_pmdmxvi8gerx4spp, "vW1024*W256Vi255i15i15", true,
11481148
"mma,paired-vector-memops")
1149+
UNALIASED_CUSTOM_BUILTIN(mma_dmsetdmrz, "vW1024*", false,
1150+
"mma,paired-vector-memops")
1151+
UNALIASED_CUSTOM_BUILTIN(mma_dmmr, "vW1024*W1024*", false,
1152+
"mma,paired-vector-memops")
1153+
UNALIASED_CUSTOM_BUILTIN(mma_dmxor, "vW1024*W1024*", true,
1154+
"mma,paired-vector-memops")
11491155

11501156
// FIXME: Obviously incomplete.
11511157

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: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void test_dmxvi8gerx4spp(unsigned char *vdmrp, unsigned char *vpp, vector unsign
8080

8181
// CHECK-LABEL: @test_pmdmxvi8gerx4spp(
8282
// CHECK-NEXT: entry:
83-
// CHECK-NEXT: [[TMP0:%.*]] = load <1024 x i1>, ptr [[VDMRP:%.*]], align 128, !tbaa [[TBAA6]]
83+
// CHECK-NEXT: [[TMP0:%.*]] = load <1024 x i1>, ptr [[VDMRP:%.*]], align 128, !tbaa [[TBAA6]]
8484
// CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA2]]
8585
// CHECK-NEXT: [[TMP2:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.pmdmxvi8gerx4spp(<1024 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]], i32 0, i32 0, i32 0)
8686
// CHECK-NEXT: store <1024 x i1> [[TMP2]], ptr [[RESP:%.*]], align 128, !tbaa [[TBAA6]]
@@ -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+
}

0 commit comments

Comments
 (0)