This should be the last step needed to solve the problem in the description of PR44153:
https://bugs.llvm.org/show_bug.cgi?id=44153
If we're casting an FP value to int, testing its signbit, and then choosing between a value and its negated value, that's a complicated way of saying "copysign":
(bitcast X) < 0 ? -TC : TC --> copysign(TC, X)
I would never expect TC == FC to happen here. Are branches folded later than this transform?