Issue 165793
Summary [InstCombine] Vector fptosi moved inside loop and scalarized
Labels new issue
Assignees
Reporter azwolski
    For the following IR, where the fp-to-int conversion is a vector operation:

```llvm
%33 = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %26, i32 9)
%34 = fptosi <4 x float> %33 to <4 x i32>
br label %35

35:
  %36 = phi i32 [0, %10], [ %59, %58]
  %37 = icmp samesign ult i32 %36, 4
  br i1 %37, label %38, label %60

38:
  %40 = extractelement <4 x i32> %34, i32 %36
```
After running the InstCombine pass, the conversion becomes scalarized and moved inside the loop:

```llvm
%30 = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %26, i32 9)
br label %31

31:
  %32 = phi i32 [0, %10], [ %59, %58]
 %33 = icmp samesign ult i32 %32, 4
  br i1 %33, label %34, label %60

34:
  %37 = extractelement <4 x float> %30, i32 %32
  %38 = fptosi float %37 to i32
```
This transformation appears incorrect, since it changes a vector fp-to-int conversion into a scalar one and moves it inside the loop.

I will prepare a baseline test that reproduces the issue, along with a proposal for a bug fix.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to