<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/64059>64059</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [SimplifyCFG] Miss lookup table optimization even for simple switch
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          XChy
      </td>
    </tr>
</table>

<pre>
    Shell: `opt -S -passes='simplifycfg<switch-to-lookup>' src.ll.`
Lookup table optimization has no effect for examples below:
```llvm
define i8 @src(i8 noundef %arg) {
start:
  switch i8 %arg, label %unreachable [
  i8 0, label %case0
  i8 1, label %case1
  i8 2, label %case2
  i8 3, label %case3
  ]
unreachable:
  unreachable
case0:
  br label %case3
case1:
  br label %case3
case2:
  br label %case3
case3:
  %phi = phi i8 [0, %case0], [ 1, %case1 ], [ 2, %case2 ], [3, %start]
  ret i8 %phi
}
```
This should be folded into `ret i8 %arg` with "SingleValue" lookup table, but NOT in fact.

Neither for ` %phi = phi i8 [1, %case0], [ 2, %case1 ], [ 3, %case2 ], [4, %start]`, which should be folded into `ret(add %arg 1)` with "LinearMapKind" lookup table.

To find the reason why the IR above do not fold under switch-to-lookup optimization, I debugged with these IR.
Finally, I found that the function **isTypeLegalForLookupTable** determines that i8 is illegal for DataLayout (So are i16, i32, i64). 
Maybe this is because I do not specify DataLayout, but from my point of view, such SingleValue/LinearMap optimization should be machine-independent.
#63876 provides a proof about transformation.
It would be great if someone could explain whether it's a miscompilation and fix it if yes.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVVFv4zYM_jXKC5HAkWI7echD2yzDYb0bsBbDXmWLjrjJkiHJzWW_fpCctk7vbjigaCx91CfyI0XKEOhkEfesvGflYSHHqJ3f__WgL4vGqcv-SaMxTNwBqwo3RFg-wXKQIWBg4sB4HagfDHWXtjsx8RDOFFu9jG5pnPtnHJj4hfEagm9XxqxYVbDiwIq7xwxClI1BcEOknv6VkZwFLQNYB9h12EbonAf8KvvBYIAGjTszcTdRJK78Z8xLP20p7Mgi0BbYpgi-ZXxLW7ButAo7YLyU_sT4Dlh9Px0IUfr4xggweZ8JrsYPYGSDJq1H61G2OrucxLqeoS0UN3atDFjM0PU36HqG8m9QPkPFN6h4RVl5mD5nfs1Cme_mrcmtd4PGf5d48u-nzPjPmYmZGePloAmYOED6TUKX91m-N-HKQ16W95Nwr5LBDOAzgM8Acd2f0vqqD4DHeM3poOlaPfXhQxlNy2dNAYJ2o1HQIHTOKFRANrpU_-9EqTiqAs4UNTDOn8ieDP4pzYiMczCz8k4-NWOEL78_A1noZBtX16vz_y9IUaPPpZ4ovyvR-gcS8R9JJH4g0eajRFVW_6yp1f8bN-NbqdQ19JSa3Tz-R7Io_Wc5_EZWfVTgJtxnBx1ZBVEjeJTBWTjrS15--gNk414QlAPrYnYC0tv18LGt3PSMFMAnUNiMpxOqyaeoMSTG691HstKYy2TZpYYAUcuYr-1G2-bWw_gd43cUni8DPuJJmqPzU6N6nhKZYFAY0fdkMUwUtAUKQMakEzmLBxnlo7y4MQLj2ycH0iPQukq3k8gpo2rD-G4Fk3ef5aVBiKn0KLW5Vo7J-VcdwoAtdZcZ72tNdd710F9gcGQjuA5eCM8JDGOr4aYoj28puu237znvZavJ4pKswgGtQvtWqFxUYltXMHj3QgoDyPTpupSvMUL00obO-T5TXg99inB-pT55TEp1EFyPziK0GcGvg5GUCgDzE6CY5glI6Cm0rh_ITD5Kq6Cjr0CZ44JhtVB7oXZiJxe4X1e7Yr3lvK4Xei86VEpUal3Vu_VGKr4Wm3VRrnnD-U5U1YL2vOCiqPmmqIuNqFeiKqsaO76pC95IUbJNgb0ks0pzZeX8aUEhjLivNkW5W-QmF_Kw5NziGTLIOE-z0-_TmWUzngLbFIZCDO8skaLJU_bpOjAfjr-y8gCfKYSb53KbH3xBm6sqz1m8voTF6M1exziE1Fz5kfHjiaIem1XresaPeSZOP8vBu7-xjYwfs6-B8WOO5b8AAAD__6DGcQ8">