1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=machine-scheduler -o - %s | FileCheck %s
3 # RUN: llc -march=amdgcn -mcpu=gfx1100 -run-pass=machine-scheduler -o - %s | FileCheck %s
4 # Make sure FP mode is not a hard scheduling boundary
7 name: denorm_mode_not_barrier
8 tracksRegLiveness: true
13 ; CHECK-LABEL: name: denorm_mode_not_barrier
14 ; CHECK: liveins: $vgpr0_vgpr1
15 ; CHECK: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
16 ; CHECK: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY]], 0, 0, implicit $exec :: (load (s32))
17 ; CHECK: [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY]], 4, 0, implicit $exec :: (load (s32))
18 ; CHECK: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 [[GLOBAL_LOAD_DWORD]], [[GLOBAL_LOAD_DWORD1]], implicit $exec
19 ; CHECK: S_DENORM_MODE 0, implicit-def $mode, implicit $mode
20 ; CHECK: S_ENDPGM 0, implicit [[V_ADD_U32_e32_]]
21 %0:vreg_64 = COPY $vgpr0_vgpr1
22 %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec :: (load (s32))
23 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
24 %2:vgpr_32 = GLOBAL_LOAD_DWORD %0, 4, 0, implicit $exec :: (load (s32))
25 %3:vgpr_32 = V_ADD_U32_e32 %1, %2, implicit $exec
26 S_ENDPGM 0, implicit %3
30 name: round_mode_not_barrier
31 tracksRegLiveness: true
36 ; CHECK-LABEL: name: round_mode_not_barrier
37 ; CHECK: liveins: $vgpr0_vgpr1
38 ; CHECK: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
39 ; CHECK: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY]], 0, 0, implicit $exec :: (load (s32))
40 ; CHECK: [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY]], 4, 0, implicit $exec :: (load (s32))
41 ; CHECK: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 [[GLOBAL_LOAD_DWORD]], [[GLOBAL_LOAD_DWORD1]], implicit $exec
42 ; CHECK: S_ROUND_MODE 0, implicit-def $mode, implicit $mode
43 ; CHECK: S_ENDPGM 0, implicit [[V_ADD_U32_e32_]]
44 %0:vreg_64 = COPY $vgpr0_vgpr1
45 %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec :: (load (s32))
46 S_ROUND_MODE 0, implicit-def $mode, implicit $mode
47 %2:vgpr_32 = GLOBAL_LOAD_DWORD %0, 4, 0, implicit $exec :: (load (s32))
48 %3:vgpr_32 = V_ADD_U32_e32 %1, %2, implicit $exec
49 S_ENDPGM 0, implicit %3
53 name: denorm_mode_mode_def_use
54 tracksRegLiveness: true
59 ; CHECK-LABEL: name: denorm_mode_mode_def_use
60 ; CHECK: liveins: $vgpr0_vgpr1
61 ; CHECK: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
62 ; CHECK: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY]], 0, 0, implicit $exec :: (load (s32))
63 ; CHECK: dead %3:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY]], 4, 0, implicit $exec :: (load (s32))
64 ; CHECK: S_DENORM_MODE 0, implicit-def $mode, implicit $mode
65 ; CHECK: [[V_ADD_F32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 0, [[GLOBAL_LOAD_DWORD]], implicit $mode, implicit $exec
66 ; CHECK: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 [[GLOBAL_LOAD_DWORD]], [[V_ADD_F32_e32_]], implicit $exec
67 ; CHECK: S_ENDPGM 0, implicit [[V_ADD_F32_e32_]], implicit [[V_ADD_U32_e32_]]
68 %0:vreg_64 = COPY $vgpr0_vgpr1
69 %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec :: (load (s32))
70 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
71 %2:vgpr_32 = V_ADD_F32_e32 0, %1, implicit $mode, implicit $exec
72 %3:vgpr_32 = GLOBAL_LOAD_DWORD %0, 4, 0, implicit $exec :: (load (s32))
73 %4:vgpr_32 = V_ADD_U32_e32 %1, %2, implicit $exec
74 S_ENDPGM 0, implicit %2, implicit %4
78 name: round_mode_mode_def_use
79 tracksRegLiveness: true
84 ; CHECK-LABEL: name: round_mode_mode_def_use
85 ; CHECK: liveins: $vgpr0_vgpr1
86 ; CHECK: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
87 ; CHECK: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY]], 0, 0, implicit $exec :: (load (s32))
88 ; CHECK: dead %3:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY]], 4, 0, implicit $exec :: (load (s32))
89 ; CHECK: S_ROUND_MODE 0, implicit-def $mode, implicit $mode
90 ; CHECK: [[V_ADD_F32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 0, [[GLOBAL_LOAD_DWORD]], implicit $mode, implicit $exec
91 ; CHECK: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 [[GLOBAL_LOAD_DWORD]], [[V_ADD_F32_e32_]], implicit $exec
92 ; CHECK: S_ENDPGM 0, implicit [[V_ADD_F32_e32_]], implicit [[V_ADD_U32_e32_]]
93 %0:vreg_64 = COPY $vgpr0_vgpr1
94 %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec :: (load (s32))
95 S_ROUND_MODE 0, implicit-def $mode, implicit $mode
96 %2:vgpr_32 = V_ADD_F32_e32 0, %1, implicit $mode, implicit $exec
97 %3:vgpr_32 = GLOBAL_LOAD_DWORD %0, 4, 0, implicit $exec :: (load (s32))
98 %4:vgpr_32 = V_ADD_U32_e32 %1, %2, implicit $exec
99 S_ENDPGM 0, implicit %2, implicit %4