From a43c0974f07452c44708a184fbbfbe93daa9e132 Mon Sep 17 00:00:00 2001 From: "chenglin.bi" Date: Sat, 15 Oct 2022 02:24:46 +0800 Subject: [PATCH] [SimplifyCFG] Add tests for simpilfycfg, switch to lookup table with i2 types; NFC --- .../SimplifyCFG/X86/switch_to_lookup_table.ll | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll index 8654412..141e9bf 100644 --- a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll +++ b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll @@ -1691,3 +1691,119 @@ return: %storemerge = phi i1 [ true, %sw.bb ], [ false, %sw.default ] ret i1 %storemerge } + +define i32 @signed_overflow1(i8 %n) { +; CHECK-LABEL: @signed_overflow1( +; CHECK-NEXT: start: +; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[N:%.*]] to i2 +; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub i2 [[TRUNC]], -2 +; CHECK-NEXT: [[SWITCH_TABLEIDX_ZEXT:%.*]] = zext i2 [[SWITCH_TABLEIDX]] to i3 +; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* @switch.table.signed_overflow1, i32 0, i3 [[SWITCH_TABLEIDX_ZEXT]] +; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, i32* [[SWITCH_GEP]], align 4 +; CHECK-NEXT: ret i32 [[SWITCH_LOAD]] +; +start: + %trunc = trunc i8 %n to i2 + switch i2 %trunc, label %bb1 [ + i2 0, label %bb6 + i2 1, label %bb3 + i2 -2, label %bb4 + i2 -1, label %bb5 + ] + +bb1: ; preds = %start + unreachable + +bb3: ; preds = %start + br label %bb6 + +bb4: ; preds = %start + br label %bb6 + +bb5: ; preds = %start + br label %bb6 + +bb6: ; preds = %start, %bb3, %bb4, %bb5 + %.sroa.0.0 = phi i32 [ 4444, %bb5 ], [ 3333, %bb4 ], [ 2222, %bb3 ], [ 1111, %start ] + ret i32 %.sroa.0.0 +} + +define i32 @signed_overflow2(i8 %n) { +; CHECK-LABEL: @signed_overflow2( +; CHECK-NEXT: start: +; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[N:%.*]] to i2 +; CHECK-NEXT: switch i2 [[TRUNC]], label [[BB1:%.*]] [ +; CHECK-NEXT: i2 1, label [[BB6:%.*]] +; CHECK-NEXT: i2 -2, label [[BB4:%.*]] +; CHECK-NEXT: i2 -1, label [[BB5:%.*]] +; CHECK-NEXT: ] +; CHECK: bb1: +; CHECK-NEXT: unreachable +; CHECK: bb4: +; CHECK-NEXT: br label [[BB6]] +; CHECK: bb5: +; CHECK-NEXT: br label [[BB6]] +; CHECK: bb6: +; CHECK-NEXT: [[DOTSROA_0_0:%.*]] = phi i32 [ 4444, [[BB5]] ], [ 3333, [[BB4]] ], [ 2222, [[START:%.*]] ] +; CHECK-NEXT: ret i32 [[DOTSROA_0_0]] +; +start: + %trunc = trunc i8 %n to i2 + switch i2 %trunc, label %bb1 [ + i2 1, label %bb3 + i2 -2, label %bb4 + i2 -1, label %bb5 + ] + +bb1: ; preds = %start + unreachable + +bb3: ; preds = %start + br label %bb6 + +bb4: ; preds = %start + br label %bb6 + +bb5: ; preds = %start + br label %bb6 + +bb6: ; preds = %start, %bb3, %bb4, %bb5 + %.sroa.0.0 = phi i32 [ 4444, %bb5 ], [ 3333, %bb4 ], [ 2222, %bb3 ] + ret i32 %.sroa.0.0 +} + +define i32 @signed_overflow_negative(i8 %n) { +; CHECK-LABEL: @signed_overflow_negative( +; CHECK-NEXT: start: +; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[N:%.*]] to i2 +; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub i2 [[TRUNC]], -2 +; CHECK-NEXT: [[SWITCH_IDX_CAST:%.*]] = zext i2 [[SWITCH_TABLEIDX]] to i32 +; CHECK-NEXT: [[SWITCH_IDX_MULT:%.*]] = mul i32 [[SWITCH_IDX_CAST]], 1111 +; CHECK-NEXT: [[SWITCH_OFFSET:%.*]] = add i32 [[SWITCH_IDX_MULT]], 1111 +; CHECK-NEXT: ret i32 [[SWITCH_OFFSET]] +; +start: + %trunc = trunc i8 %n to i2 + switch i2 %trunc, label %bb1 [ + i2 0, label %bb6 + i2 1, label %bb3 + i2 -2, label %bb4 + i2 -1, label %bb5 + ] + +bb1: ; preds = %start + unreachable + +bb3: ; preds = %start + br label %bb6 + +bb4: ; preds = %start + br label %bb6 + +bb5: ; preds = %start + br label %bb6 + +bb6: ; preds = %start, %bb3, %bb4, %bb5 + %.sroa.0.0 = phi i32 [ 2222, %bb5 ], [ 1111, %bb4 ], [ 4444, %bb3 ], [ 3333, %start ] + ret i32 %.sroa.0.0 +} -- 2.7.4