janagor wrote: > I don't really understand what the new version of the patch is doing... > instcombine can infer `nuw` on `trunc` if the operand has range metadata. > There isn't any reason to duplicate that code.
The unoptimized version of IR is which is generated is the following: ``` %atomic-temp = alloca i8, align 1 %0 = load atomic i8, ptr @t1 monotonic, align 1 store i8 %0, ptr %atomic-temp, align 1 %1 = load i8, ptr %atomic-temp, align 1 %loadedv = trunc i8 %1 to i1 ret i1 %loadedv ``` Lines 2-3 are generated by 'EmitAtomicOp' in CGAtomic, while `CodeGenFunction::EmitLoadOfScalar` adds `range!` only to line 4 when -O1. Lack of adding `range!` to 2nd line does not generate nuw at the end in trunc. From what I saw there were 2 ways to solve it: either add `nuw` the way I did it there, or add `range!` in EmitAtomicOp. I think in such case in order to no longer duplicate code would be to just make `getRangeForLoadFromType` a public method and use it for atomic load as well. https://github.com/llvm/llvm-project/pull/133546 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits