Details
Diff Detail
Event Timeline
It would be good to add tests for the sitofp case as well.
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | ||
---|---|---|
1759 | Can use IC.computeKnownBits(Src, 0, &I) to also make use of AC/DT, I believe. | |
llvm/test/Transforms/InstCombine/sitofp.ll | ||
245 | According to alive, this mask would be fine: https://alive2.llvm.org/ce/z/PdpF6F This is because this is a mask of the form 0b1000... rather than 0b1111.... The right mask to test would be: https://alive2.llvm.org/ce/z/GYxTRu (We could also make use of these low zero bits, but I think that would be better as a separate change.) |
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | ||
---|---|---|
1945 | We should have at least one test providing coverage for this path (and fpext too?). IIUC, this patch will improve a case like this: define half @masked_int_to_fp_trunc(i32 %A) { %m = and i32 %A, 16777215 %B = sitofp i32 %m to float %C = fptrunc float %B to half ret half %C } But we don't actually need a mask: |
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | ||
---|---|---|
1945 | hi @spatel, I think the case in your link https://alive2.llvm.org/ce/z/iaEX2i is related to another top, maybe make use of the fptrunc?
%m = and i25 %A, smallMaskValue %B = uitofp i25 %m to float %C = fptoui float %B to i25
#0 isKnownExactCastIntToFP (I=..., IC=...) at /home/zhongyunde/llvm-project-init-dev_12x/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp:1762 #1 0x0000aaaaae7ee18c in llvm::InstCombinerImpl::foldItoFPtoI (this=0xffffffffbce0, FI=...) at /home/zhongyunde/llvm-project-init-dev_12x/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp:1986 #2 0x0000aaaaae7ee398 in llvm::InstCombinerImpl::visitFPToUI (this=0xffffffffbce0, FI=...) at /home/zhongyunde/llvm-project-init-dev_12x/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp:2011 |
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | ||
---|---|---|
1945 | I understand that we are not optimizing ideally for this pattern, but that's not my point. |
I don't think this was updated correctly. There should be test diffs from the file fpcast.ll?
LGTM - clearly, we can still do better, but this seems like a safe improvement.
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | ||
---|---|---|
1757 | Please leave the TODO note. We could still check sign bits rather than zeros or do some other kind of refinement. |
Please leave the TODO note. We could still check sign bits rather than zeros or do some other kind of refinement.