@@ -53,3 +53,67 @@ body: |
53
53
%3:sreg_32 = S_OR_B32 %2:sreg_32, %2:sreg_32, implicit-def $scc
54
54
%4:vgpr_16 = V_CVT_F16_U16_t16_e64 0, %3:sreg_32, 0, 0, 0, implicit $mode, implicit $exec
55
55
...
56
+
57
+ ---
58
+ name : vgpr16_to_spgr32
59
+ body : |
60
+ ; GCN-LABEL: name: vgpr16_to_spgr32
61
+ ; GCN: bb.0.entry:
62
+ ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
63
+ ; GCN-NEXT: {{ $}}
64
+ ; GCN-NEXT: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
65
+ ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[DEF]]
66
+ ; GCN-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 killed [[COPY]], 0, 1, 0, implicit $exec :: (load (s64) from `ptr addrspace(3) poison` + 8, align 4, addrspace 3)
67
+ ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[DS_READ2_B32_gfx9_]].sub0
68
+ ; GCN-NEXT: [[V_CVT_F16_F32_t16_e64_:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, killed [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec
69
+ ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535
70
+ ; GCN-NEXT: [[DEF1:%[0-9]+]]:vgpr_16 = IMPLICIT_DEF
71
+ ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vgpr_32 = REG_SEQUENCE [[V_CVT_F16_F32_t16_e64_]], %subreg.lo16, [[DEF1]], %subreg.hi16
72
+ ; GCN-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE]], implicit $exec
73
+ ; GCN-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 killed [[S_MOV_B32_]], killed [[V_READFIRSTLANE_B32_]], implicit-def dead $scc
74
+ ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 5
75
+ ; GCN-NEXT: [[S_MUL_I32_:%[0-9]+]]:sreg_32 = S_MUL_I32 killed [[S_AND_B32_]], killed [[S_MOV_B32_1]]
76
+ ; GCN-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32 = S_MOV_B32 2
77
+ ; GCN-NEXT: S_CMP_LG_U32 killed [[S_MUL_I32_]], killed [[S_MOV_B32_2]], implicit-def $scc
78
+ ; GCN-NEXT: S_CBRANCH_SCC1 %bb.2, implicit $scc
79
+ ; GCN-NEXT: S_BRANCH %bb.1
80
+ ; GCN-NEXT: {{ $}}
81
+ ; GCN-NEXT: bb.1:
82
+ ; GCN-NEXT: [[S_MOV_B32_3:%[0-9]+]]:sreg_32 = S_MOV_B32 1
83
+ ; GCN-NEXT: [[S_MOV_B32_4:%[0-9]+]]:sreg_32 = S_MOV_B32 killed [[S_MOV_B32_3]]
84
+ ; GCN-NEXT: $sgpr0 = COPY [[S_MOV_B32_4]]
85
+ ; GCN-NEXT: SI_RETURN_TO_EPILOG $sgpr0
86
+ ; GCN-NEXT: {{ $}}
87
+ ; GCN-NEXT: bb.2:
88
+ ; GCN-NEXT: [[S_MOV_B32_5:%[0-9]+]]:sreg_32 = S_MOV_B32 2
89
+ ; GCN-NEXT: [[S_MOV_B32_6:%[0-9]+]]:sreg_32 = S_MOV_B32 killed [[S_MOV_B32_5]]
90
+ ; GCN-NEXT: $sgpr0 = COPY [[S_MOV_B32_6]]
91
+ ; GCN-NEXT: SI_RETURN_TO_EPILOG $sgpr0
92
+ bb.0.entry:
93
+ successors: %bb.1(0x40000000), %bb.2(0x40000000); %bb.1(50.00%), %bb.2(50.00%)
94
+
95
+ %5:sreg_32 = IMPLICIT_DEF
96
+ %6:vgpr_32 = COPY %5:sreg_32
97
+ %4:vreg_64 = DS_READ2_B32_gfx9 killed %6:vgpr_32, 0, 1, 0, implicit $exec :: (load (s64) from `ptr addrspace(3) poison` + 8, align 4, addrspace 3)
98
+ %7:sgpr_32 = COPY %4.sub0:vreg_64
99
+ %8:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, killed %7:sgpr_32, 0, 0, 0, implicit $mode, implicit $exec
100
+ %9:sreg_32 = S_MOV_B32 65535
101
+ %11:sreg_32 = COPY %8:vgpr_16
102
+ %10:sreg_32 = S_AND_B32 killed %9:sreg_32, killed %11:sreg_32, implicit-def dead $scc
103
+ %12:sreg_32 = S_MOV_B32 5
104
+ %13:sreg_32 = S_MUL_I32 killed %10:sreg_32, killed %12:sreg_32
105
+ %14:sreg_32 = S_MOV_B32 2
106
+ S_CMP_LG_U32 killed %13:sreg_32, killed %14:sreg_32, implicit-def $scc
107
+ S_CBRANCH_SCC1 %bb.2, implicit $scc
108
+ S_BRANCH %bb.1
109
+ bb.1:
110
+ %17:sreg_32 = S_MOV_B32 1
111
+ %18:sreg_32 = S_MOV_B32 killed %17:sreg_32
112
+ $sgpr0 = COPY %18:sreg_32
113
+ SI_RETURN_TO_EPILOG $sgpr0
114
+ bb.2:
115
+ %15:sreg_32 = S_MOV_B32 2
116
+ %16:sreg_32 = S_MOV_B32 killed %15:sreg_32
117
+ $sgpr0 = COPY %16:sreg_32
118
+ SI_RETURN_TO_EPILOG $sgpr0
119
+ ...
0 commit comments