Search
Tuesday, 18th of September 2018, 21:02:27 UTC
21:38:25
stassats
it's ultimately caused by misoptimization, but it's a tricky one
21:39:33
stassats
the one that turns (the vector (if x y #())) into (if x (the vector y) #())
21:40:38
stassats
it can't hoist the cast if there are some intervening nodes, even if they're without side-effects
21:42:51
stassats
what if i change just the data flow but not the control flow
21:50:16
stassats
doesn't work, for some reason
21:52:25
stassats
additional passes after the cast is converted do optimize things away, but i obviously don't want to perform them
21:52:55
stassats
>This is not a INTEGER
21:57:27
stassats
ok, some reason is that it has to change the control flow as well
22:05:39
stassats
filed into notes, maybe i'll have the energy to optimize it later
22:09:35
stassats
an even better optimization would be (logior (or b 20) 10) => (if b (logior b 10) 30)
22:12:51
stassats
although in this case because it's using CMOV it's actually slower
22:12:54
stassats
ugh, compilers are hard
22:35:48
stassats
and in the end ir1-optimize-cast can deal with it, but when the node is deleted it doesn't get reoptimized, because there's no relation between them
22:36:02
stassats
data relation, just control
22:42:06
stassats
i guess i can trigger it in unlink-node, feels icky though
Wednesday, 19th of September 2018, 9:02:27 UTC