Skip to content

Commit 8423337

Browse files
author
Kai Luo
committed
[PowerPC] Add test for ppc-mi-peepholes on MMA register COPYs. NFC.
1 parent bc3baa9 commit 8423337

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
;REQUIRES: asserts
2+
;RUN: not --crash llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix < %s 2>&1 | FileCheck %s
3+
4+
;CHECK: %[[PHI1:[0-9]+]]:accrc = PHI
5+
;CHECK: %[[PHI0:[0-9]+]]:uaccrc = PHI
6+
;CHECK: Virtual register %[[PHI0]] is not needed live through the block.
7+
;CHECK: Virtual register %[[PHI1]] must be live through the block.
8+
9+
target datalayout = "E-m:a-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512"
10+
11+
define void @baz(i64 %arg) local_unnamed_addr #0 {
12+
bb:
13+
%call = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.ppc.mma.disassemble.acc(<512 x i1> poison)
14+
%extractvalue = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %call, 0
15+
%extractvalue1 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %call, 2
16+
%extractvalue2 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %call, 3
17+
%bitcast = bitcast <16 x i8> %extractvalue to <2 x double>
18+
%bitcast3 = bitcast <16 x i8> %extractvalue1 to <2 x double>
19+
%shufflevector = shufflevector <2 x double> %bitcast, <2 x double> %bitcast3, <2 x i32> <i32 1, i32 3>
20+
%shufflevector4 = shufflevector <2 x double> %shufflevector, <2 x double> poison, <4 x i32> <i32 0, i32 poison, i32 1, i32 poison>
21+
%fneg = fneg <4 x double> %shufflevector4
22+
%shufflevector5 = shufflevector <4 x double> %fneg, <4 x double> poison, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
23+
%shufflevector6 = shufflevector <16 x i8> zeroinitializer, <16 x i8> %extractvalue2, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
24+
%bitcast7 = bitcast <32 x i8> %shufflevector6 to <4 x double>
25+
%fsub = fsub <4 x double> %shufflevector5, %bitcast7
26+
%shufflevector8 = shufflevector <4 x double> poison, <4 x double> %fsub, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
27+
%fmul = fmul <4 x double> %shufflevector8, zeroinitializer
28+
%call9 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> zeroinitializer, <4 x double> zeroinitializer, <4 x double> %fmul)
29+
%fadd = fadd <4 x double> %call9, zeroinitializer
30+
store <4 x double> %fadd, ptr poison, align 4
31+
br i1 poison, label %bb10, label %bb12
32+
33+
bb10: ; preds = %bb
34+
%call11 = tail call <512 x i1> @llvm.ppc.mma.xvf64gerpp(<512 x i1> poison, <256 x i1> poison, <16 x i8> poison)
35+
br label %bb12
36+
37+
bb12: ; preds = %bb10, %bb
38+
%phi = phi <512 x i1> [ poison, %bb ], [ %call11, %bb10 ]
39+
br label %bb13
40+
41+
bb13: ; preds = %bb13, %bb12
42+
%icmp = icmp eq i64 0, %arg
43+
br i1 %icmp, label %bb14, label %bb13
44+
45+
bb14: ; preds = %bb13
46+
%call15 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.ppc.mma.disassemble.acc(<512 x i1> poison)
47+
%extractvalue16 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %call15, 1
48+
%call17 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.ppc.mma.disassemble.acc(<512 x i1> %phi)
49+
%extractvalue18 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %call17, 1
50+
%bitcast19 = bitcast <16 x i8> %extractvalue16 to <2 x double>
51+
%bitcast20 = bitcast <16 x i8> %extractvalue18 to <2 x double>
52+
%fsub21 = fsub <2 x double> zeroinitializer, %bitcast19
53+
%fadd22 = fadd <2 x double> zeroinitializer, %fsub21
54+
%fadd23 = fadd <2 x double> %fadd22, zeroinitializer
55+
%fsub24 = fsub <2 x double> zeroinitializer, %bitcast20
56+
%fadd25 = fadd <2 x double> zeroinitializer, %fsub24
57+
%fadd26 = fadd <2 x double> %fadd25, zeroinitializer
58+
%fadd27 = fadd <2 x double> %fadd26, zeroinitializer
59+
%call28 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %fadd27, <2 x double> zeroinitializer, <2 x double> zeroinitializer)
60+
%fadd29 = fadd <2 x double> zeroinitializer, %call28
61+
%shufflevector30 = shufflevector <2 x double> %fadd29, <2 x double> poison, <2 x i32> <i32 1, i32 0>
62+
store <2 x double> %shufflevector30, ptr poison, align 4
63+
ret void
64+
}
65+
66+
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
67+
declare <512 x i1> @llvm.ppc.mma.xxsetaccz() #1
68+
69+
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
70+
declare <512 x i1> @llvm.ppc.mma.xvf64gerpp(<512 x i1>, <256 x i1>, <16 x i8>) #1
71+
72+
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
73+
declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.ppc.mma.disassemble.acc(<512 x i1>) #1
74+
75+
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
76+
declare double @llvm.fmuladd.f64(double, double, double) #2
77+
78+
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
79+
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #2
80+
81+
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
82+
declare <4 x double> @llvm.fmuladd.v4f64(<4 x double>, <4 x double>, <4 x double>) #2
83+
84+
attributes #0 = { "target-features"="+altivec,+bpermd,+crbits,+crypto,+direct-move,+extdiv,+isa-v206-instructions,+isa-v207-instructions,+isa-v30-instructions,+isa-v31-instructions,+mma,+paired-vector-memops,+pcrelative-memops,+power10-vector,+power8-vector,+power9-vector,+prefix-instrs,+quadword-atomics,+vsx,-aix-shared-lib-tls-model-opt,-aix-small-local-dynamic-tls,-aix-small-local-exec-tls,-htm,-privileged,-rop-protect,-spe" }
85+
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(none) }
86+
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

0 commit comments

Comments
 (0)