https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119533
--- Comment #4 from Vineet Gupta <vineetg at gcc dot gnu.org> ---
Debug log:
`
Phase 4: Insert, modify and remove vsetvl insns.
### loop for missed vsetvl
Insert missed vsetvl info at edge(bb 31 -> bb 32): VALID (insn 663, bb 31)
Insert vsetvl insn 753:
Insert missed vsetvl info at edge(bb 31 -> bb 43): VALID (insn 663, bb 31)
Insert vsetvl insn 754:
edge(bb 42 -> bb 64):VALID (insn 663, bb 64) <-- gcc_assert() EDGE_ABNORMAL
`
So insn 663 is central to this issue. It is initially propagated into multiple
BBs and then LCM prunes it out from most of them.
`
Phase 1:
Try fuse basic block 29
Ignore curr info since prev info available with it:
prev_info: VALID (insn 663, bb 29)
curr_info: VALID (insn 664, bb 29)
VSETVL infos after phase 1
bb 29:
probability: 2.2% (guessed)
Header vsetvl info:VALID (insn 663, bb 29)
Footer vsetvl info:VALID (insn 663, bb 29)
insn 663 vsetvl info:VALID (insn 663, bb 29)
Phase 2: Lift up vsetvl info.
Try lift up 0.
Set empty bb 28 to info:VALID (insn 663, bb 29)
Try lift up 1.
Set empty bb 27 to info:VALID (insn 663, bb 28)
Try lift up 2.
Set empty bb 43 to info:VALID (insn 663, bb 27)
Try lift up 3.
Fused global info result (lift 3):
Set empty bb 31 to info:VALID (insn 663, bb 43)
Set empty bb 42 to info:VALID (insn 663, bb 43)
Phase 3: Reduce global vsetvl infos.
### 663 was present in 6 BBs
Compute LCM insert and delete data:
Expression List (14):
Expr[4]: VALID (insn 663, bb 27)
Expr[5]: VALID (insn 663, bb 28)
Expr[6]: VALID (insn 663, bb 29)
Expr[7]: VALID (insn 663, bb 31)
Expr[8]: VALID (insn 663, bb 42)
Expr[9]: VALID (insn 663, bb 43)
bitmap data:
BB 27:
avloc: n_bits = 14, set = {4 5 6 7 8 9 }
kill: n_bits = 14, set = {0 1 2 3 10 11 12 13 }
antloc: n_bits = 14, set = {4 }
transp: n_bits = 14, set = {}
avin: n_bits = 14, set = {}
avout: n_bits = 14, set = {4 5 6 7 8 9 }
del: n_bits = 14, set = {4 }
BB 28:
avloc: n_bits = 14, set = {4 5 6 7 8 9 }
kill: n_bits = 14, set = {0 1 2 3 10 11 12 13 }
antloc: n_bits = 14, set = {5 }
transp: n_bits = 14, set = {}
avin: n_bits = 14, set = {4 5 6 7 8 9 }
avout: n_bits = 14, set = {4 5 6 7 8 9 }
del: n_bits = 14, set = {5 }
BB 29:
avloc: n_bits = 14, set = {4 5 6 7 8 9 }
kill: n_bits = 14, set = {0 1 2 3 10 11 12 13 }
antloc: n_bits = 14, set = {6 }
transp: n_bits = 14, set = {}
avin: n_bits = 14, set = {4 5 6 7 8 9 }
avout: n_bits = 14, set = {4 5 6 7 8 9 }
del: n_bits = 14, set = {6 } <--- ### deleted
BB 43:
avloc: n_bits = 14, set = {4 5 6 7 8 9 }
kill: n_bits = 14, set = {0 1 2 3 10 11 12 13 }
antloc: n_bits = 14, set = {9 }
transp: n_bits = 14, set = {}
avin: n_bits = 14, set = {4 5 6 7 8 9 }
avout: n_bits = 14, set = {4 5 6 7 8 9 }
del: n_bits = 14, set = {9 }
...
LCM deleting vsetvl of block 27
LCM deleting vsetvl of block 28
LCM deleting vsetvl of block 29
LCM deleting vsetvl of block 43
VSETVL infos after phase 3
### 663 deleted from 4 of the 6 blocks
bb 27:
probability: 2.2% (guessed)
Header vsetvl info:VALID (insn 663, bb 27) (deleted)
Footer vsetvl info:VALID (insn 663, bb 27) (deleted)
bb 28:
probability: 2.2% (guessed)
Header vsetvl info:VALID (insn 663, bb 28) (deleted)
Footer vsetvl info:VALID (insn 663, bb 28) (deleted)
bb 29:
probability: 2.2% (guessed)
Header vsetvl info:VALID (insn 663, bb 29) (deleted)
Footer vsetvl info:VALID (insn 663, bb 29) (deleted)
insn 663 vsetvl info:VALID (insn 663, bb 29) (deleted)
bb 31:
probability: 1.9% (guessed)
Header vsetvl info:VALID (insn 663, bb 31)
Footer vsetvl info:VALID (insn 663, bb 31)
bb 42:
probability: 1.9% (guessed)
Header vsetvl info:VALID (insn 663, bb 42)
Footer vsetvl info:VALID (insn 663, bb 42)
bb 43:
probability: 1.9% (guessed)
Header vsetvl info:VALID (insn 663, bb 43) (deleted)
Footer vsetvl info:VALID (insn 663, bb 43) (deleted)
`
Comparing the asm-output of --param=vsetvl-strategy=simple (which works), the
BB layout is generally sane and it seems we can simply skip the abnormal edge.
FWWI I did try to tinker with LCM a bit, skipping abnormal edges in
invalid_opt_bb_p () which creates the sets for LCM, but it didn't matter.