@@ -866,5 +866,90 @@ bb.3:
866
866
ret void
867
867
}
868
868
869
+ ; This should not cause Assertion `getType() == V->getType() && "All operands to PHI node must be the same type as the PHI node
870
+ ; Note: whether or not the assertion fires depends on the iteration ortder of PhiNodes in AMDGPULateCodeGenPrepare, which
871
+ ; is non-deterministic due to iterators over a set of pointers.
872
+
873
+
874
+ define amdgpu_kernel void @MissingInc_PhiChain (i1 %cmp , <16 x i8 > %input ) {
875
+ ; GFX906-LABEL: MissingInc_PhiChain:
876
+ ; GFX906: ; %bb.0: ; %entry
877
+ ; GFX906-NEXT: s_load_dword s2, s[0:1], 0x24
878
+ ; GFX906-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x34
879
+ ; GFX906-NEXT: s_mov_b32 s10, 1
880
+ ; GFX906-NEXT: v_mov_b32_e32 v4, 1
881
+ ; GFX906-NEXT: s_mov_b32 s11, 1
882
+ ; GFX906-NEXT: s_waitcnt lgkmcnt(0)
883
+ ; GFX906-NEXT: s_bitcmp1_b32 s2, 0
884
+ ; GFX906-NEXT: s_cselect_b64 s[2:3], -1, 0
885
+ ; GFX906-NEXT: s_xor_b64 s[0:1], s[2:3], -1
886
+ ; GFX906-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1]
887
+ ; GFX906-NEXT: v_cmp_ne_u32_e64 s[0:1], 1, v0
888
+ ; GFX906-NEXT: s_branch .LBB14_2
889
+ ; GFX906-NEXT: .LBB14_1: ; %bb.5
890
+ ; GFX906-NEXT: ; in Loop: Header=BB14_2 Depth=1
891
+ ; GFX906-NEXT: v_lshrrev_b32_e32 v4, 8, v0
892
+ ; GFX906-NEXT: s_mov_b32 s10, 0
893
+ ; GFX906-NEXT: s_mov_b32 s11, 0
894
+ ; GFX906-NEXT: .LBB14_2: ; %bb.1
895
+ ; GFX906-NEXT: ; =>This Inner Loop Header: Depth=1
896
+ ; GFX906-NEXT: s_and_b64 vcc, exec, s[0:1]
897
+ ; GFX906-NEXT: s_mov_b64 s[8:9], s[2:3]
898
+ ; GFX906-NEXT: ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
899
+ ; GFX906-NEXT: s_cbranch_vccnz .LBB14_4
900
+ ; GFX906-NEXT: ; %bb.3: ; %bb.2
901
+ ; GFX906-NEXT: ; in Loop: Header=BB14_2 Depth=1
902
+ ; GFX906-NEXT: v_lshlrev_b16_e64 v0, 8, s11
903
+ ; GFX906-NEXT: v_or_b32_sdwa v0, s10, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
904
+ ; GFX906-NEXT: v_lshlrev_b16_e32 v1, 8, v4
905
+ ; GFX906-NEXT: v_or_b32_e32 v0, v1, v0
906
+ ; GFX906-NEXT: s_mov_b64 s[8:9], -1
907
+ ; GFX906-NEXT: .LBB14_4: ; %Flow
908
+ ; GFX906-NEXT: ; in Loop: Header=BB14_2 Depth=1
909
+ ; GFX906-NEXT: s_andn2_b64 vcc, exec, s[8:9]
910
+ ; GFX906-NEXT: s_cbranch_vccnz .LBB14_7
911
+ ; GFX906-NEXT: ; %bb.5: ; %bb.3
912
+ ; GFX906-NEXT: ; in Loop: Header=BB14_2 Depth=1
913
+ ; GFX906-NEXT: s_and_b64 vcc, exec, s[0:1]
914
+ ; GFX906-NEXT: s_cbranch_vccnz .LBB14_1
915
+ ; GFX906-NEXT: ; %bb.6: ; %bb.4
916
+ ; GFX906-NEXT: ; in Loop: Header=BB14_2 Depth=1
917
+ ; GFX906-NEXT: v_mov_b32_e32 v0, s4
918
+ ; GFX906-NEXT: v_mov_b32_e32 v1, s5
919
+ ; GFX906-NEXT: v_mov_b32_e32 v2, s6
920
+ ; GFX906-NEXT: v_mov_b32_e32 v3, s7
921
+ ; GFX906-NEXT: s_branch .LBB14_1
922
+ ; GFX906-NEXT: .LBB14_7: ; in Loop: Header=BB14_2 Depth=1
923
+ ; GFX906-NEXT: ; implicit-def: $vgpr4
924
+ ; GFX906-NEXT: ; implicit-def: $sgpr10
925
+ ; GFX906-NEXT: ; implicit-def: $sgpr11
926
+ ; GFX906-NEXT: s_cbranch_execz .LBB14_2
927
+ ; GFX906-NEXT: ; %bb.8: ; %DummyReturnBlock
928
+ ; GFX906-NEXT: s_endpgm
929
+ entry:
930
+ br label %bb.1
931
+
932
+ bb.1 : ; preds = %bb.5, %entry
933
+ %phi1 = phi <16 x i8 > [ <i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 >, %entry ], [ %shuffle , %bb.5 ]
934
+ br i1 %cmp , label %bb.3 , label %bb.2
935
+
936
+ bb.2 : ; preds = %bb.1
937
+ %insert = insertelement <16 x i8 > %phi1 , i8 0 , i64 0
938
+ br label %bb.3
939
+
940
+ bb.3 : ; preds = %bb.2, %bb.1
941
+ %phi2 = phi <16 x i8 > [ %insert , %bb.2 ], [ %phi1 , %bb.1 ]
942
+ br i1 %cmp , label %bb.5 , label %bb.4
943
+
944
+ bb.4 : ; preds = %bb.3
945
+ br label %bb.5
946
+
947
+ bb.5 : ; preds = %bb.4, %bb.3
948
+ %phi3 = phi <16 x i8 > [ %input , %bb.4 ], [ %phi2 , %bb.3 ]
949
+ %shuffle = shufflevector <16 x i8 > %phi3 , <16 x i8 > zeroinitializer , <16 x i32 > <i32 0 , i32 1 , 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 >
950
+ br label %bb.1
951
+ }
952
+
953
+
869
954
870
955
declare i32 @llvm.amdgcn.workitem.id.x ()
0 commit comments