Path segmentation can make you think timing-exception priority changed. It did not.
Whether set_clock_groups supersedes set_max_delay
can differ. Consider two scenarios.
Scenario 1
set_max_delay <ns> -datapath_only -from <instance> -to <instance>
You pass instance names to -from/-to. Here
set_clock_groups -asynchronous overrides
set_max_delay. Vivado selects valid startpoints
when you provide an instance.
Scenario 2
set_max_delay <ns> -datapath_only -from <pin> -to <pin | instance>
In this scenario, you pass a pin to -from. If that pin causes path segmentation, set_clock_groups
-asynchronous does not override this set_max_delay.
Path segmentation makes the path start at the pin, not the first clock domain. That
path falls outside set_clock_groups coverage, so
set_max_delay applies.