Skip to content

[SimplifyCFG] SwitchToLookupTable missing optimizations. #64231

Open
@dianqk

Description

@dianqk

https://alive2.llvm.org/ce/z/7Mhqtr

define i64 @src(i8 %0) {
start:
  switch i8 %0, label %bb2 [
    i8 126, label %bb3
    i8 127, label %bb4
    i8 -128, label %bb5
  ]

bb2:
  unreachable

bb3:
  br label %bb10

bb4:
  br label %bb10

bb5:
  br label %bb10

bb10:
  %result= phi i64 [ 3, %bb3 ], [ 4, %bb4 ], [ 5, %bb5 ]
  ret i64 %result
}

It can be converted to:

define i64 @tgt(i8 %0) {
start:
  %switch.tableidx = sub i8 %0, 126
  %switch.idx.cast = zext i8 %switch.tableidx to i64
  %switch.offset = add nuw nsw i64 %switch.idx.cast, 3
  ret i64 %switch.offset
}

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions