@@ -53,3 +53,66 @@ 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: [[SUBREG_TO_REG:%[0-9]+]]:vgpr_32 = SUBREG_TO_REG 0, [[V_CVT_F16_F32_t16_e64_]], %subreg.lo16
71
+ ; GCN-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[SUBREG_TO_REG]], implicit $exec
72
+ ; GCN-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 killed [[S_MOV_B32_]], killed [[V_READFIRSTLANE_B32_]], implicit-def dead $scc
73
+ ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 5
74
+ ; GCN-NEXT: [[S_MUL_I32_:%[0-9]+]]:sreg_32 = S_MUL_I32 killed [[S_AND_B32_]], killed [[S_MOV_B32_1]]
75
+ ; GCN-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32 = S_MOV_B32 2
76
+ ; GCN-NEXT: S_CMP_LG_U32 killed [[S_MUL_I32_]], killed [[S_MOV_B32_2]], implicit-def $scc
77
+ ; GCN-NEXT: S_CBRANCH_SCC1 %bb.2, implicit $scc
78
+ ; GCN-NEXT: S_BRANCH %bb.1
79
+ ; GCN-NEXT: {{ $}}
80
+ ; GCN-NEXT: bb.1:
81
+ ; GCN-NEXT: [[S_MOV_B32_3:%[0-9]+]]:sreg_32 = S_MOV_B32 1
82
+ ; GCN-NEXT: [[S_MOV_B32_4:%[0-9]+]]:sreg_32 = S_MOV_B32 killed [[S_MOV_B32_3]]
83
+ ; GCN-NEXT: $sgpr0 = COPY [[S_MOV_B32_4]]
84
+ ; GCN-NEXT: SI_RETURN_TO_EPILOG $sgpr0
85
+ ; GCN-NEXT: {{ $}}
86
+ ; GCN-NEXT: bb.2:
87
+ ; GCN-NEXT: [[S_MOV_B32_5:%[0-9]+]]:sreg_32 = S_MOV_B32 2
88
+ ; GCN-NEXT: [[S_MOV_B32_6:%[0-9]+]]:sreg_32 = S_MOV_B32 killed [[S_MOV_B32_5]]
89
+ ; GCN-NEXT: $sgpr0 = COPY [[S_MOV_B32_6]]
90
+ ; GCN-NEXT: SI_RETURN_TO_EPILOG $sgpr0
91
+ bb.0.entry:
92
+ successors: %bb.1(0x40000000), %bb.2(0x40000000); %bb.1(50.00%), %bb.2(50.00%)
93
+
94
+ %5:sreg_32 = IMPLICIT_DEF
95
+ %6:vgpr_32 = COPY %5:sreg_32
96
+ %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)
97
+ %7:sgpr_32 = COPY %4.sub0:vreg_64
98
+ %8:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, killed %7:sgpr_32, 0, 0, 0, implicit $mode, implicit $exec
99
+ %9:sreg_32 = S_MOV_B32 65535
100
+ %11:sreg_32 = COPY %8:vgpr_16
101
+ %10:sreg_32 = S_AND_B32 killed %9:sreg_32, killed %11:sreg_32, implicit-def dead $scc
102
+ %12:sreg_32 = S_MOV_B32 5
103
+ %13:sreg_32 = S_MUL_I32 killed %10:sreg_32, killed %12:sreg_32
104
+ %14:sreg_32 = S_MOV_B32 2
105
+ S_CMP_LG_U32 killed %13:sreg_32, killed %14:sreg_32, implicit-def $scc
106
+ S_CBRANCH_SCC1 %bb.2, implicit $scc
107
+ S_BRANCH %bb.1
108
+ bb.1:
109
+ %17:sreg_32 = S_MOV_B32 1
110
+ %18:sreg_32 = S_MOV_B32 killed %17:sreg_32
111
+ $sgpr0 = COPY %18:sreg_32
112
+ SI_RETURN_TO_EPILOG $sgpr0
113
+ bb.2:
114
+ %15:sreg_32 = S_MOV_B32 2
115
+ %16:sreg_32 = S_MOV_B32 killed %15:sreg_32
116
+ $sgpr0 = COPY %16:sreg_32
117
+ SI_RETURN_TO_EPILOG $sgpr0
118
+ ...
0 commit comments