@@ -899,3 +899,90 @@ other.dst:
899899pow2.dst:
900900 ret void
901901}
902+
903+ define void @switch_large_enough_for_clustering (i32 %x , ptr %dst ) {
904+ ; CHECK-LABEL: switch_large_enough_for_clustering:
905+ ; CHECK: ; %bb.0: ; %entry
906+ ; CHECK-NEXT: cmp w0, #1
907+ ; CHECK-NEXT: b.le LBB12_5
908+ ; CHECK-NEXT: ; %bb.1: ; %entry
909+ ; CHECK-NEXT: cmp w0, #7
910+ ; CHECK-NEXT: b.eq LBB12_9
911+ ; CHECK-NEXT: ; %bb.2: ; %entry
912+ ; CHECK-NEXT: cmp w0, #4
913+ ; CHECK-NEXT: b.eq LBB12_7
914+ ; CHECK-NEXT: ; %bb.3: ; %entry
915+ ; CHECK-NEXT: cmp w0, #2
916+ ; CHECK-NEXT: b.eq LBB12_8
917+ ; CHECK-NEXT: LBB12_4: ; %exit
918+ ; CHECK-NEXT: ret
919+ ; CHECK-NEXT: LBB12_5: ; %entry
920+ ; CHECK-NEXT: cbz w0, LBB12_8
921+ ; CHECK-NEXT: ; %bb.6: ; %entry
922+ ; CHECK-NEXT: cmp w0, #1
923+ ; CHECK-NEXT: b.ne LBB12_4
924+ ; CHECK-NEXT: LBB12_7: ; %succ.2
925+ ; CHECK-NEXT: str wzr, [x1]
926+ ; CHECK-NEXT: ret
927+ ; CHECK-NEXT: LBB12_8: ; %succ.1
928+ ; CHECK-NEXT: strb wzr, [x1]
929+ ; CHECK-NEXT: ret
930+ ; CHECK-NEXT: LBB12_9: ; %succ.3
931+ ; CHECK-NEXT: strh wzr, [x1]
932+ ; CHECK-NEXT: ret
933+ ;
934+ ; GISEL-LABEL: switch_large_enough_for_clustering:
935+ ; GISEL: ; %bb.0: ; %entry
936+ ; GISEL-NEXT: cmp w0, #2
937+ ; GISEL-NEXT: b.lt LBB12_5
938+ ; GISEL-NEXT: ; %bb.1: ; %entry
939+ ; GISEL-NEXT: cmp w0, #7
940+ ; GISEL-NEXT: b.eq LBB12_9
941+ ; GISEL-NEXT: ; %bb.2: ; %entry
942+ ; GISEL-NEXT: cmp w0, #4
943+ ; GISEL-NEXT: b.eq LBB12_7
944+ ; GISEL-NEXT: ; %bb.3: ; %entry
945+ ; GISEL-NEXT: cmp w0, #2
946+ ; GISEL-NEXT: b.eq LBB12_8
947+ ; GISEL-NEXT: LBB12_4: ; %exit
948+ ; GISEL-NEXT: ret
949+ ; GISEL-NEXT: LBB12_5: ; %entry
950+ ; GISEL-NEXT: cbz w0, LBB12_8
951+ ; GISEL-NEXT: ; %bb.6: ; %entry
952+ ; GISEL-NEXT: cmp w0, #1
953+ ; GISEL-NEXT: b.ne LBB12_4
954+ ; GISEL-NEXT: LBB12_7: ; %succ.2
955+ ; GISEL-NEXT: str wzr, [x1]
956+ ; GISEL-NEXT: ret
957+ ; GISEL-NEXT: LBB12_8: ; %succ.1
958+ ; GISEL-NEXT: strb wzr, [x1]
959+ ; GISEL-NEXT: ret
960+ ; GISEL-NEXT: LBB12_9: ; %succ.3
961+ ; GISEL-NEXT: strh wzr, [x1]
962+ ; GISEL-NEXT: ret
963+ entry:
964+ switch i32 %x , label %exit [
965+ i32 0 , label %succ.1
966+ i32 2 , label %succ.1
967+ i32 1 , label %succ.2
968+ i32 4 , label %succ.2
969+ i32 7 , label %succ.3
970+ ]
971+
972+ succ.1 :
973+ store i8 0 , ptr %dst
974+ br label %exit
975+
976+ succ.2 :
977+ call void @llvm.memset.p0.i64 (ptr %dst , i8 0 , i64 4 , i1 false )
978+ br label %exit
979+
980+ succ.3 :
981+ call void @llvm.memset.p0.i64 (ptr %dst , i8 0 , i64 2 , i1 false )
982+ br label %exit
983+
984+ exit:
985+ ret void
986+ }
987+
988+ declare void @llvm.memset.p0.i64 (ptr writeonly captures(none), i8 , i64 , i1 immarg)
0 commit comments