Skip to content

Commit 2b46f31

Browse files
authored
AMDGPU: Sign extend immediates for 32-bit subregister extracts (#154870)
extractSubregFromImm previously would sign extend the 16-bit subregister extracts, but not the 32-bit. We try to consistently store immediates as sign extended, since not doing it can result in misreported isInlineImmediate checks.
1 parent e0945df commit 2b46f31

File tree

7 files changed

+264
-276
lines changed

7 files changed

+264
-276
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3475,9 +3475,9 @@ std::optional<int64_t> SIInstrInfo::extractSubregFromImm(int64_t Imm,
34753475
case AMDGPU::NoSubRegister:
34763476
return Imm;
34773477
case AMDGPU::sub0:
3478-
return Lo_32(Imm);
3478+
return SignExtend64<32>(Imm);
34793479
case AMDGPU::sub1:
3480-
return Hi_32(Imm);
3480+
return SignExtend64<32>(Imm >> 32);
34813481
case AMDGPU::lo16:
34823482
return SignExtend64<16>(Imm);
34833483
case AMDGPU::hi16:

llvm/test/CodeGen/AMDGPU/flat-atomicrmw-fadd.ll

Lines changed: 48 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -503,9 +503,10 @@ define float @flat_agent_atomic_fadd_ret_f32__offset12b_neg__amdgpu_no_fine_grai
503503
; GFX908: ; %bb.0:
504504
; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
505505
; GFX908-NEXT: v_add_co_u32_e32 v3, vcc, 0xfffff800, v0
506-
; GFX908-NEXT: v_addc_co_u32_e32 v4, vcc, -1, v1, vcc
507-
; GFX908-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
506+
; GFX908-NEXT: s_mov_b64 s[4:5], vcc
507+
; GFX908-NEXT: v_addc_co_u32_e64 v4, s[4:5], -1, v1, s[4:5]
508508
; GFX908-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
509+
; GFX908-NEXT: v_mov_b32_e32 v0, v3
509510
; GFX908-NEXT: flat_load_dword v0, v[0:1]
510511
; GFX908-NEXT: s_mov_b64 s[4:5], 0
511512
; GFX908-NEXT: .LBB2_1: ; %atomicrmw.start
@@ -2827,9 +2828,10 @@ define float @flat_agent_atomic_fadd_ret_f32__offset12b_neg__ftz__amdgpu_no_fine
28272828
; GFX908: ; %bb.0:
28282829
; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28292830
; GFX908-NEXT: v_add_co_u32_e32 v3, vcc, 0xfffff800, v0
2830-
; GFX908-NEXT: v_addc_co_u32_e32 v4, vcc, -1, v1, vcc
2831-
; GFX908-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
2831+
; GFX908-NEXT: s_mov_b64 s[4:5], vcc
2832+
; GFX908-NEXT: v_addc_co_u32_e64 v4, s[4:5], -1, v1, s[4:5]
28322833
; GFX908-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
2834+
; GFX908-NEXT: v_mov_b32_e32 v0, v3
28332835
; GFX908-NEXT: flat_load_dword v0, v[0:1]
28342836
; GFX908-NEXT: s_mov_b64 s[4:5], 0
28352837
; GFX908-NEXT: .LBB14_1: ; %atomicrmw.start
@@ -16759,14 +16761,11 @@ define <2 x half> @flat_agent_atomic_fadd_ret_v2f16__offset12b_neg__amdgpu_no_fi
1675916761
; GFX11-LABEL: flat_agent_atomic_fadd_ret_v2f16__offset12b_neg__amdgpu_no_fine_grained_memory:
1676016762
; GFX11: ; %bb.0:
1676116763
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16762-
; GFX11-NEXT: v_mov_b32_e32 v3, v0
16763-
; GFX11-NEXT: s_mov_b32 s0, 0
16764-
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
16765-
; GFX11-NEXT: v_add_co_u32 v4, vcc_lo, 0xfffff800, v3
16766-
; GFX11-NEXT: v_add_co_ci_u32_e64 v5, null, -1, v1, vcc_lo
16767-
; GFX11-NEXT: v_add_co_u32 v3, vcc_lo, 0xfffff800, v3
16768-
; GFX11-NEXT: flat_load_b32 v0, v[4:5]
16764+
; GFX11-NEXT: v_add_co_u32 v3, vcc_lo, 0xfffff800, v0
16765+
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
1676916766
; GFX11-NEXT: v_add_co_ci_u32_e64 v4, null, -1, v1, vcc_lo
16767+
; GFX11-NEXT: s_mov_b32 s0, 0
16768+
; GFX11-NEXT: flat_load_b32 v0, v[3:4]
1677016769
; GFX11-NEXT: .LBB58_1: ; %atomicrmw.start
1677116770
; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1
1677216771
; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
@@ -16816,9 +16815,10 @@ define <2 x half> @flat_agent_atomic_fadd_ret_v2f16__offset12b_neg__amdgpu_no_fi
1681616815
; GFX90A: ; %bb.0:
1681716816
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1681816817
; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, 0xfffff800, v0
16819-
; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, -1, v1, vcc
16820-
; GFX90A-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
16818+
; GFX90A-NEXT: s_mov_b64 s[4:5], vcc
16819+
; GFX90A-NEXT: v_addc_co_u32_e64 v5, s[4:5], -1, v1, s[4:5]
1682116820
; GFX90A-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
16821+
; GFX90A-NEXT: v_mov_b32_e32 v0, v4
1682216822
; GFX90A-NEXT: flat_load_dword v0, v[0:1]
1682316823
; GFX90A-NEXT: s_mov_b64 s[4:5], 0
1682416824
; GFX90A-NEXT: .LBB58_1: ; %atomicrmw.start
@@ -16841,9 +16841,10 @@ define <2 x half> @flat_agent_atomic_fadd_ret_v2f16__offset12b_neg__amdgpu_no_fi
1684116841
; GFX908: ; %bb.0:
1684216842
; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1684316843
; GFX908-NEXT: v_add_co_u32_e32 v3, vcc, 0xfffff800, v0
16844-
; GFX908-NEXT: v_addc_co_u32_e32 v4, vcc, -1, v1, vcc
16845-
; GFX908-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
16844+
; GFX908-NEXT: s_mov_b64 s[4:5], vcc
16845+
; GFX908-NEXT: v_addc_co_u32_e64 v4, s[4:5], -1, v1, s[4:5]
1684616846
; GFX908-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
16847+
; GFX908-NEXT: v_mov_b32_e32 v0, v3
1684716848
; GFX908-NEXT: flat_load_dword v0, v[0:1]
1684816849
; GFX908-NEXT: s_mov_b64 s[4:5], 0
1684916850
; GFX908-NEXT: .LBB58_1: ; %atomicrmw.start
@@ -17331,13 +17332,11 @@ define void @flat_agent_atomic_fadd_noret_v2f16__offset12b_neg__amdgpu_no_fine_g
1733117332
; GFX11-LABEL: flat_agent_atomic_fadd_noret_v2f16__offset12b_neg__amdgpu_no_fine_grained_memory:
1733217333
; GFX11: ; %bb.0:
1733317334
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17334-
; GFX11-NEXT: v_add_co_u32 v3, vcc_lo, 0xfffff800, v0
17335-
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
17336-
; GFX11-NEXT: v_add_co_ci_u32_e64 v4, null, -1, v1, vcc_lo
1733717335
; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0
17336+
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
1733817337
; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo
17339-
; GFX11-NEXT: flat_load_b32 v4, v[3:4]
1734017338
; GFX11-NEXT: s_mov_b32 s0, 0
17339+
; GFX11-NEXT: flat_load_b32 v4, v[0:1]
1734117340
; GFX11-NEXT: .LBB61_1: ; %atomicrmw.start
1734217341
; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1
1734317342
; GFX11-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
@@ -17386,9 +17385,10 @@ define void @flat_agent_atomic_fadd_noret_v2f16__offset12b_neg__amdgpu_no_fine_g
1738617385
; GFX90A: ; %bb.0:
1738717386
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1738817387
; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, 0xfffff800, v0
17389-
; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, -1, v1, vcc
17390-
; GFX90A-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
17388+
; GFX90A-NEXT: s_mov_b64 s[4:5], vcc
17389+
; GFX90A-NEXT: v_addc_co_u32_e64 v5, s[4:5], -1, v1, s[4:5]
1739117390
; GFX90A-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
17391+
; GFX90A-NEXT: v_mov_b32_e32 v0, v4
1739217392
; GFX90A-NEXT: flat_load_dword v1, v[0:1]
1739317393
; GFX90A-NEXT: s_mov_b64 s[4:5], 0
1739417394
; GFX90A-NEXT: .LBB61_1: ; %atomicrmw.start
@@ -17411,9 +17411,10 @@ define void @flat_agent_atomic_fadd_noret_v2f16__offset12b_neg__amdgpu_no_fine_g
1741117411
; GFX908: ; %bb.0:
1741217412
; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1741317413
; GFX908-NEXT: v_add_co_u32_e32 v3, vcc, 0xfffff800, v0
17414-
; GFX908-NEXT: v_addc_co_u32_e32 v4, vcc, -1, v1, vcc
17415-
; GFX908-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
17414+
; GFX908-NEXT: s_mov_b64 s[4:5], vcc
17415+
; GFX908-NEXT: v_addc_co_u32_e64 v4, s[4:5], -1, v1, s[4:5]
1741617416
; GFX908-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
17417+
; GFX908-NEXT: v_mov_b32_e32 v0, v3
1741717418
; GFX908-NEXT: flat_load_dword v1, v[0:1]
1741817419
; GFX908-NEXT: s_mov_b64 s[4:5], 0
1741917420
; GFX908-NEXT: .LBB61_1: ; %atomicrmw.start
@@ -19313,16 +19314,13 @@ define <2 x bfloat> @flat_agent_atomic_fadd_ret_v2bf16__offset12b_neg__amdgpu_no
1931319314
; GFX11-TRUE16-LABEL: flat_agent_atomic_fadd_ret_v2bf16__offset12b_neg__amdgpu_no_fine_grained_memory:
1931419315
; GFX11-TRUE16: ; %bb.0:
1931519316
; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19316-
; GFX11-TRUE16-NEXT: v_mov_b32_e32 v3, v0
19317-
; GFX11-TRUE16-NEXT: s_mov_b32 s0, 0
19318-
; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
19319-
; GFX11-TRUE16-NEXT: v_add_co_u32 v4, vcc_lo, 0xfffff800, v3
19320-
; GFX11-TRUE16-NEXT: v_add_co_ci_u32_e64 v5, null, -1, v1, vcc_lo
19321-
; GFX11-TRUE16-NEXT: v_add_co_u32 v3, vcc_lo, 0xfffff800, v3
19322-
; GFX11-TRUE16-NEXT: flat_load_b32 v0, v[4:5]
19317+
; GFX11-TRUE16-NEXT: v_add_co_u32 v3, vcc_lo, 0xfffff800, v0
19318+
; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
1932319319
; GFX11-TRUE16-NEXT: v_add_co_ci_u32_e64 v4, null, -1, v1, vcc_lo
1932419320
; GFX11-TRUE16-NEXT: v_and_b32_e32 v1, 0xffff0000, v2
1932519321
; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v2, 16, v2
19322+
; GFX11-TRUE16-NEXT: s_mov_b32 s0, 0
19323+
; GFX11-TRUE16-NEXT: flat_load_b32 v0, v[3:4]
1932619324
; GFX11-TRUE16-NEXT: s_set_inst_prefetch_distance 0x1
1932719325
; GFX11-TRUE16-NEXT: .p2align 6
1932819326
; GFX11-TRUE16-NEXT: .LBB70_1: ; %atomicrmw.start
@@ -19367,16 +19365,13 @@ define <2 x bfloat> @flat_agent_atomic_fadd_ret_v2bf16__offset12b_neg__amdgpu_no
1936719365
; GFX11-FAKE16-LABEL: flat_agent_atomic_fadd_ret_v2bf16__offset12b_neg__amdgpu_no_fine_grained_memory:
1936819366
; GFX11-FAKE16: ; %bb.0:
1936919367
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19370-
; GFX11-FAKE16-NEXT: v_mov_b32_e32 v3, v0
19371-
; GFX11-FAKE16-NEXT: s_mov_b32 s1, 0
19372-
; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
19373-
; GFX11-FAKE16-NEXT: v_add_co_u32 v4, vcc_lo, 0xfffff800, v3
19374-
; GFX11-FAKE16-NEXT: v_add_co_ci_u32_e64 v5, null, -1, v1, vcc_lo
19375-
; GFX11-FAKE16-NEXT: v_add_co_u32 v3, vcc_lo, 0xfffff800, v3
19376-
; GFX11-FAKE16-NEXT: flat_load_b32 v0, v[4:5]
19368+
; GFX11-FAKE16-NEXT: v_add_co_u32 v3, vcc_lo, 0xfffff800, v0
19369+
; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
1937719370
; GFX11-FAKE16-NEXT: v_add_co_ci_u32_e64 v4, null, -1, v1, vcc_lo
1937819371
; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v2
1937919372
; GFX11-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff0000, v2
19373+
; GFX11-FAKE16-NEXT: s_mov_b32 s1, 0
19374+
; GFX11-FAKE16-NEXT: flat_load_b32 v0, v[3:4]
1938019375
; GFX11-FAKE16-NEXT: s_set_inst_prefetch_distance 0x1
1938119376
; GFX11-FAKE16-NEXT: .p2align 6
1938219377
; GFX11-FAKE16-NEXT: .LBB70_1: ; %atomicrmw.start
@@ -19463,9 +19458,10 @@ define <2 x bfloat> @flat_agent_atomic_fadd_ret_v2bf16__offset12b_neg__amdgpu_no
1946319458
; GFX90A: ; %bb.0:
1946419459
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1946519460
; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, 0xfffff800, v0
19466-
; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, -1, v1, vcc
19467-
; GFX90A-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
19461+
; GFX90A-NEXT: s_mov_b64 s[4:5], vcc
19462+
; GFX90A-NEXT: v_addc_co_u32_e64 v5, s[4:5], -1, v1, s[4:5]
1946819463
; GFX90A-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
19464+
; GFX90A-NEXT: v_mov_b32_e32 v0, v4
1946919465
; GFX90A-NEXT: flat_load_dword v0, v[0:1]
1947019466
; GFX90A-NEXT: s_mov_b64 s[6:7], 0
1947119467
; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v2
@@ -19506,9 +19502,10 @@ define <2 x bfloat> @flat_agent_atomic_fadd_ret_v2bf16__offset12b_neg__amdgpu_no
1950619502
; GFX908: ; %bb.0:
1950719503
; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1950819504
; GFX908-NEXT: v_add_co_u32_e32 v3, vcc, 0xfffff800, v0
19509-
; GFX908-NEXT: v_addc_co_u32_e32 v4, vcc, -1, v1, vcc
19510-
; GFX908-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
19505+
; GFX908-NEXT: s_mov_b64 s[4:5], vcc
19506+
; GFX908-NEXT: v_addc_co_u32_e64 v4, s[4:5], -1, v1, s[4:5]
1951119507
; GFX908-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
19508+
; GFX908-NEXT: v_mov_b32_e32 v0, v3
1951219509
; GFX908-NEXT: flat_load_dword v0, v[0:1]
1951319510
; GFX908-NEXT: s_mov_b64 s[6:7], 0
1951419511
; GFX908-NEXT: v_lshlrev_b32_e32 v1, 16, v2
@@ -20299,15 +20296,13 @@ define void @flat_agent_atomic_fadd_noret_v2bf16__offset12b_neg__amdgpu_no_fine_
2029920296
; GFX11-TRUE16-LABEL: flat_agent_atomic_fadd_noret_v2bf16__offset12b_neg__amdgpu_no_fine_grained_memory:
2030020297
; GFX11-TRUE16: ; %bb.0:
2030120298
; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20302-
; GFX11-TRUE16-NEXT: v_add_co_u32 v3, vcc_lo, 0xfffff800, v0
20303-
; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
20304-
; GFX11-TRUE16-NEXT: v_add_co_ci_u32_e64 v4, null, -1, v1, vcc_lo
2030520299
; GFX11-TRUE16-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0
20300+
; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
2030620301
; GFX11-TRUE16-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo
20307-
; GFX11-TRUE16-NEXT: flat_load_b32 v3, v[3:4]
2030820302
; GFX11-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff0000, v2
2030920303
; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v5, 16, v2
2031020304
; GFX11-TRUE16-NEXT: s_mov_b32 s0, 0
20305+
; GFX11-TRUE16-NEXT: flat_load_b32 v3, v[0:1]
2031120306
; GFX11-TRUE16-NEXT: s_set_inst_prefetch_distance 0x1
2031220307
; GFX11-TRUE16-NEXT: .p2align 6
2031320308
; GFX11-TRUE16-NEXT: .LBB73_1: ; %atomicrmw.start
@@ -20352,15 +20347,13 @@ define void @flat_agent_atomic_fadd_noret_v2bf16__offset12b_neg__amdgpu_no_fine_
2035220347
; GFX11-FAKE16-LABEL: flat_agent_atomic_fadd_noret_v2bf16__offset12b_neg__amdgpu_no_fine_grained_memory:
2035320348
; GFX11-FAKE16: ; %bb.0:
2035420349
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20355-
; GFX11-FAKE16-NEXT: v_add_co_u32 v3, vcc_lo, 0xfffff800, v0
20356-
; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
20357-
; GFX11-FAKE16-NEXT: v_add_co_ci_u32_e64 v4, null, -1, v1, vcc_lo
2035820350
; GFX11-FAKE16-NEXT: v_add_co_u32 v0, vcc_lo, 0xfffff800, v0
20351+
; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
2035920352
; GFX11-FAKE16-NEXT: v_add_co_ci_u32_e64 v1, null, -1, v1, vcc_lo
20360-
; GFX11-FAKE16-NEXT: flat_load_b32 v3, v[3:4]
2036120353
; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v4, 16, v2
2036220354
; GFX11-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff0000, v2
2036320355
; GFX11-FAKE16-NEXT: s_mov_b32 s1, 0
20356+
; GFX11-FAKE16-NEXT: flat_load_b32 v3, v[0:1]
2036420357
; GFX11-FAKE16-NEXT: s_set_inst_prefetch_distance 0x1
2036520358
; GFX11-FAKE16-NEXT: .p2align 6
2036620359
; GFX11-FAKE16-NEXT: .LBB73_1: ; %atomicrmw.start
@@ -20446,9 +20439,10 @@ define void @flat_agent_atomic_fadd_noret_v2bf16__offset12b_neg__amdgpu_no_fine_
2044620439
; GFX90A: ; %bb.0:
2044720440
; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2044820441
; GFX90A-NEXT: v_add_co_u32_e32 v4, vcc, 0xfffff800, v0
20449-
; GFX90A-NEXT: v_addc_co_u32_e32 v5, vcc, -1, v1, vcc
20450-
; GFX90A-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
20442+
; GFX90A-NEXT: s_mov_b64 s[4:5], vcc
20443+
; GFX90A-NEXT: v_addc_co_u32_e64 v5, s[4:5], -1, v1, s[4:5]
2045120444
; GFX90A-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
20445+
; GFX90A-NEXT: v_mov_b32_e32 v0, v4
2045220446
; GFX90A-NEXT: flat_load_dword v1, v[0:1]
2045320447
; GFX90A-NEXT: s_mov_b64 s[6:7], 0
2045420448
; GFX90A-NEXT: v_lshlrev_b32_e32 v3, 16, v2
@@ -20489,9 +20483,10 @@ define void @flat_agent_atomic_fadd_noret_v2bf16__offset12b_neg__amdgpu_no_fine_
2048920483
; GFX908: ; %bb.0:
2049020484
; GFX908-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2049120485
; GFX908-NEXT: v_add_co_u32_e32 v3, vcc, 0xfffff800, v0
20492-
; GFX908-NEXT: v_addc_co_u32_e32 v4, vcc, -1, v1, vcc
20493-
; GFX908-NEXT: v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
20486+
; GFX908-NEXT: s_mov_b64 s[4:5], vcc
20487+
; GFX908-NEXT: v_addc_co_u32_e64 v4, s[4:5], -1, v1, s[4:5]
2049420488
; GFX908-NEXT: v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
20489+
; GFX908-NEXT: v_mov_b32_e32 v0, v3
2049520490
; GFX908-NEXT: flat_load_dword v1, v[0:1]
2049620491
; GFX908-NEXT: s_mov_b64 s[6:7], 0
2049720492
; GFX908-NEXT: v_lshlrev_b32_e32 v5, 16, v2

0 commit comments

Comments
 (0)