You've already forked linux-packaging-mono
Imported Upstream version 5.18.0.167
Former-commit-id: 289509151e0fee68a1b591a20c9f109c3c789d3a
This commit is contained in:
parent
e19d552987
commit
b084638f15
@ -1,45 +0,0 @@
|
||||
; RUN: opt < %s -simplifycfg -switch-to-lookup -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
||||
|
||||
; In the presence of "-no-jump-tables"="true", simplifycfg should not convert switches to lookup tables.
|
||||
|
||||
; CHECK: @switch.table.bar = private unnamed_addr constant [4 x i32] [i32 55, i32 123, i32 0, i32 -1]
|
||||
; CHECK-LABEL: foo
|
||||
; CHECK-NOT: @switch.table.foo = private unnamed_addr constant [4 x i32] [i32 55, i32 123, i32 0, i32 -1]
|
||||
|
||||
define i32 @foo(i32 %c) "no-jump-tables"="true" {
|
||||
entry:
|
||||
switch i32 %c, label %sw.default [
|
||||
i32 42, label %return
|
||||
i32 43, label %sw.bb1
|
||||
i32 44, label %sw.bb2
|
||||
i32 45, label %sw.bb3
|
||||
]
|
||||
|
||||
sw.bb1: br label %return
|
||||
sw.bb2: br label %return
|
||||
sw.bb3: br label %return
|
||||
sw.default: br label %return
|
||||
return:
|
||||
%retval.0 = phi i32 [ 15, %sw.default ], [ -1, %sw.bb3 ], [ 0, %sw.bb2 ], [ 123, %sw.bb1 ], [ 55, %entry ]
|
||||
ret i32 %retval.0
|
||||
}
|
||||
|
||||
|
||||
define i32 @bar(i32 %c) {
|
||||
entry:
|
||||
switch i32 %c, label %sw.default [
|
||||
i32 42, label %return
|
||||
i32 43, label %sw.bb1
|
||||
i32 44, label %sw.bb2
|
||||
i32 45, label %sw.bb3
|
||||
]
|
||||
|
||||
sw.bb1: br label %return
|
||||
sw.bb2: br label %return
|
||||
sw.bb3: br label %return
|
||||
sw.default: br label %return
|
||||
return:
|
||||
%retval.0 = phi i32 [ 15, %sw.default ], [ -1, %sw.bb3 ], [ 0, %sw.bb2 ], [ 123, %sw.bb1 ], [ 55, %entry ]
|
||||
ret i32 %retval.0
|
||||
}
|
||||
|
@ -1,3 +0,0 @@
|
||||
if not 'X86' in config.root.targets:
|
||||
config.unsupported = True
|
||||
|
@ -1,318 +0,0 @@
|
||||
; RUN: opt -S -simplifycfg -mtriple=x86_64-unknown-unknown -mattr=+bmi < %s | FileCheck %s --check-prefix=ALL --check-prefix=BMI
|
||||
; RUN: opt -S -simplifycfg -mtriple=x86_64-unknown-unknown -mattr=+lzcnt < %s | FileCheck %s --check-prefix=ALL --check-prefix=LZCNT
|
||||
; RUN: opt -S -simplifycfg -mtriple=x86_64-unknown-unknown < %s | FileCheck %s --check-prefix=ALL --check-prefix=GENERIC
|
||||
|
||||
|
||||
define i64 @test1(i64 %A) {
|
||||
; ALL-LABEL: @test1(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i64 %A, 0
|
||||
; ALL: [[CTLZ:%[A-Za-z0-9]+]] = tail call i64 @llvm.ctlz.i64(i64 %A, i1 true)
|
||||
; ALL-NEXT: select i1 [[COND]], i64 64, i64 [[CTLZ]]
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i64 %A, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i64 @llvm.ctlz.i64(i64 %A, i1 true)
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i64 [ %0, %cond.true ], [ 64, %entry ]
|
||||
ret i64 %cond
|
||||
}
|
||||
|
||||
define i32 @test2(i32 %A) {
|
||||
; ALL-LABEL: @test2(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i32 %A, 0
|
||||
; ALL: [[CTLZ:%[A-Za-z0-9]+]] = tail call i32 @llvm.ctlz.i32(i32 %A, i1 true)
|
||||
; ALL-NEXT: select i1 [[COND]], i32 32, i32 [[CTLZ]]
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i32 %A, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i32 @llvm.ctlz.i32(i32 %A, i1 true)
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i32 [ %0, %cond.true ], [ 32, %entry ]
|
||||
ret i32 %cond
|
||||
}
|
||||
|
||||
|
||||
define signext i16 @test3(i16 signext %A) {
|
||||
; ALL-LABEL: @test3(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i16 %A, 0
|
||||
; ALL: [[CTLZ:%[A-Za-z0-9]+]] = tail call i16 @llvm.ctlz.i16(i16 %A, i1 true)
|
||||
; ALL-NEXT: select i1 [[COND]], i16 16, i16 [[CTLZ]]
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i16 %A, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i16 @llvm.ctlz.i16(i16 %A, i1 true)
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i16 [ %0, %cond.true ], [ 16, %entry ]
|
||||
ret i16 %cond
|
||||
}
|
||||
|
||||
|
||||
define i64 @test1b(i64 %A) {
|
||||
; ALL-LABEL: @test1b(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i64 %A, 0
|
||||
; ALL: [[CTTZ:%[A-Za-z0-9]+]] = tail call i64 @llvm.cttz.i64(i64 %A, i1 true)
|
||||
; ALL-NEXT: select i1 [[COND]], i64 64, i64 [[CTTZ]]
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i64 %A, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i64 @llvm.cttz.i64(i64 %A, i1 true)
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i64 [ %0, %cond.true ], [ 64, %entry ]
|
||||
ret i64 %cond
|
||||
}
|
||||
|
||||
|
||||
define i32 @test2b(i32 %A) {
|
||||
; ALL-LABEL: @test2b(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i32 %A, 0
|
||||
; ALL: [[CTTZ:%[A-Za-z0-9]+]] = tail call i32 @llvm.cttz.i32(i32 %A, i1 true)
|
||||
; ALL-NEXT: select i1 [[COND]], i32 32, i32 [[CTTZ]]
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i32 %A, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i32 @llvm.cttz.i32(i32 %A, i1 true)
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i32 [ %0, %cond.true ], [ 32, %entry ]
|
||||
ret i32 %cond
|
||||
}
|
||||
|
||||
|
||||
define signext i16 @test3b(i16 signext %A) {
|
||||
; ALL-LABEL: @test3b(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i16 %A, 0
|
||||
; ALL: [[CTTZ:%[A-Za-z0-9]+]] = tail call i16 @llvm.cttz.i16(i16 %A, i1 true)
|
||||
; ALL-NEXT: select i1 [[COND]], i16 16, i16 [[CTTZ]]
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i16 %A, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i16 @llvm.cttz.i16(i16 %A, i1 true)
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i16 [ %0, %cond.true ], [ 16, %entry ]
|
||||
ret i16 %cond
|
||||
}
|
||||
|
||||
; The following tests verify that calls to cttz/ctlz are speculated even if
|
||||
; basic block %cond.true has an extra zero extend/truncate which is "free"
|
||||
; for the target.
|
||||
|
||||
define i64 @test1e(i32 %x) {
|
||||
; ALL-LABEL: @test1e(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i32 %x, 0
|
||||
; ALL: [[CTTZ:%[A-Za-z0-9]+]] = tail call i32 @llvm.cttz.i32(i32 %x, i1 true)
|
||||
; ALL: [[ZEXT:%[A-Za-z0-9]+]] = zext i32 [[CTTZ]] to i64
|
||||
; BMI-NEXT: select i1 [[COND]], i64 32, i64 [[ZEXT]]
|
||||
; LZCNT-NOT: select
|
||||
; GENERIC-NOT: select
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i32 %x, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i32 @llvm.cttz.i32(i32 %x, i1 true)
|
||||
%phitmp2 = zext i32 %0 to i64
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i64 [ %phitmp2, %cond.true ], [ 32, %entry ]
|
||||
ret i64 %cond
|
||||
}
|
||||
|
||||
define i32 @test2e(i64 %x) {
|
||||
; ALL-LABEL: @test2e(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i64 %x, 0
|
||||
; ALL: [[CTTZ:%[A-Za-z0-9]+]] = tail call i64 @llvm.cttz.i64(i64 %x, i1 true)
|
||||
; ALL: [[TRUNC:%[A-Za-z0-9]+]] = trunc i64 [[CTTZ]] to i32
|
||||
; BMI-NEXT: select i1 [[COND]], i32 64, i32 [[TRUNC]]
|
||||
; LZCNT-NOT: select
|
||||
; GENERIC-NOT: select
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i64 %x, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i64 @llvm.cttz.i64(i64 %x, i1 true)
|
||||
%cast = trunc i64 %0 to i32
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i32 [ %cast, %cond.true ], [ 64, %entry ]
|
||||
ret i32 %cond
|
||||
}
|
||||
|
||||
define i64 @test3e(i32 %x) {
|
||||
; ALL-LABEL: @test3e(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i32 %x, 0
|
||||
; ALL: [[CTLZ:%[A-Za-z0-9]+]] = tail call i32 @llvm.ctlz.i32(i32 %x, i1 true)
|
||||
; ALL: [[ZEXT:%[A-Za-z0-9]+]] = zext i32 [[CTLZ]] to i64
|
||||
; LZCNT-NEXT: select i1 [[COND]], i64 32, i64 [[ZEXT]]
|
||||
; BMI-NOT: select
|
||||
; GENERIC-NOT: select
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i32 %x, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i32 @llvm.ctlz.i32(i32 %x, i1 true)
|
||||
%phitmp2 = zext i32 %0 to i64
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i64 [ %phitmp2, %cond.true ], [ 32, %entry ]
|
||||
ret i64 %cond
|
||||
}
|
||||
|
||||
define i32 @test4e(i64 %x) {
|
||||
; ALL-LABEL: @test4e(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i64 %x, 0
|
||||
; ALL: [[CTLZ:%[A-Za-z0-9]+]] = tail call i64 @llvm.ctlz.i64(i64 %x, i1 true)
|
||||
; ALL: [[TRUNC:%[A-Za-z0-9]+]] = trunc i64 [[CTLZ]] to i32
|
||||
; LZCNT-NEXT: select i1 [[COND]], i32 64, i32 [[TRUNC]]
|
||||
; BMI-NOT: select
|
||||
; GENERIC-NOT: select
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i64 %x, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i64 @llvm.ctlz.i64(i64 %x, i1 true)
|
||||
%cast = trunc i64 %0 to i32
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i32 [ %cast, %cond.true ], [ 64, %entry ]
|
||||
ret i32 %cond
|
||||
}
|
||||
|
||||
define i16 @test5e(i64 %x) {
|
||||
; ALL-LABEL: @test5e(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i64 %x, 0
|
||||
; ALL: [[CTLZ:%[A-Za-z0-9]+]] = tail call i64 @llvm.ctlz.i64(i64 %x, i1 true)
|
||||
; ALL: [[TRUNC:%[A-Za-z0-9]+]] = trunc i64 [[CTLZ]] to i16
|
||||
; LZCNT-NEXT: select i1 [[COND]], i16 64, i16 [[TRUNC]]
|
||||
; BMI-NOT: select
|
||||
; GENERIC-NOT: select
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i64 %x, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i64 @llvm.ctlz.i64(i64 %x, i1 true)
|
||||
%cast = trunc i64 %0 to i16
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i16 [ %cast, %cond.true ], [ 64, %entry ]
|
||||
ret i16 %cond
|
||||
}
|
||||
|
||||
define i16 @test6e(i32 %x) {
|
||||
; ALL-LABEL: @test6e(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i32 %x, 0
|
||||
; ALL: [[CTLZ:%[A-Za-z0-9]+]] = tail call i32 @llvm.ctlz.i32(i32 %x, i1 true)
|
||||
; ALL: [[TRUNC:%[A-Za-z0-9]+]] = trunc i32 [[CTLZ]] to i16
|
||||
; LZCNT-NEXT: select i1 [[COND]], i16 32, i16 [[TRUNC]]
|
||||
; BMI-NOT: select
|
||||
; GENERIC-NOT: select
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i32 %x, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i32 @llvm.ctlz.i32(i32 %x, i1 true)
|
||||
%cast = trunc i32 %0 to i16
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i16 [ %cast, %cond.true ], [ 32, %entry ]
|
||||
ret i16 %cond
|
||||
}
|
||||
|
||||
define i16 @test7e(i64 %x) {
|
||||
; ALL-LABEL: @test7e(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i64 %x, 0
|
||||
; ALL: [[CTTZ:%[A-Za-z0-9]+]] = tail call i64 @llvm.cttz.i64(i64 %x, i1 true)
|
||||
; ALL: [[TRUNC:%[A-Za-z0-9]+]] = trunc i64 [[CTTZ]] to i16
|
||||
; BMI-NEXT: select i1 [[COND]], i16 64, i16 [[TRUNC]]
|
||||
; LZCNT-NOT: select
|
||||
; GENERIC-NOT: select
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i64 %x, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i64 @llvm.cttz.i64(i64 %x, i1 true)
|
||||
%cast = trunc i64 %0 to i16
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i16 [ %cast, %cond.true ], [ 64, %entry ]
|
||||
ret i16 %cond
|
||||
}
|
||||
|
||||
define i16 @test8e(i32 %x) {
|
||||
; ALL-LABEL: @test8e(
|
||||
; ALL: [[COND:%[A-Za-z0-9]+]] = icmp eq i32 %x, 0
|
||||
; ALL: [[CTTZ:%[A-Za-z0-9]+]] = tail call i32 @llvm.cttz.i32(i32 %x, i1 true)
|
||||
; ALL: [[TRUNC:%[A-Za-z0-9]+]] = trunc i32 [[CTTZ]] to i16
|
||||
; BMI-NEXT: select i1 [[COND]], i16 32, i16 [[TRUNC]]
|
||||
; LZCNT-NOT: select
|
||||
; GENERIC-NOT: select
|
||||
; ALL: ret
|
||||
entry:
|
||||
%tobool = icmp eq i32 %x, 0
|
||||
br i1 %tobool, label %cond.end, label %cond.true
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
%0 = tail call i32 @llvm.cttz.i32(i32 %x, i1 true)
|
||||
%cast = trunc i32 %0 to i16
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %entry, %cond.true
|
||||
%cond = phi i16 [ %cast, %cond.true ], [ 32, %entry ]
|
||||
ret i16 %cond
|
||||
}
|
||||
|
||||
|
||||
declare i64 @llvm.ctlz.i64(i64, i1)
|
||||
declare i32 @llvm.ctlz.i32(i32, i1)
|
||||
declare i16 @llvm.ctlz.i16(i16, i1)
|
||||
declare i64 @llvm.cttz.i64(i64, i1)
|
||||
declare i32 @llvm.cttz.i32(i32, i1)
|
||||
declare i16 @llvm.cttz.i16(i16, i1)
|
@ -1,50 +0,0 @@
|
||||
; RUN: opt -S -simplifycfg -switch-to-lookup < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
||||
; rdar://17887153
|
||||
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||
target triple = "x86_64-apple-darwin12.0.0"
|
||||
|
||||
; When we have a covered lookup table, make sure we don't delete PHINodes that
|
||||
; are cached in PHIs.
|
||||
; CHECK-LABEL: @test
|
||||
; CHECK: entry:
|
||||
; CHECK-NEXT: sub i3 %arg, -4
|
||||
; CHECK-NEXT: zext i3 %switch.tableidx to i4
|
||||
; CHECK-NEXT: getelementptr inbounds [8 x i64], [8 x i64]* @switch.table.test, i32 0, i4 %switch.tableidx.zext
|
||||
; CHECK-NEXT: load i64, i64* %switch.gep
|
||||
; CHECK-NEXT: add i64
|
||||
; CHECK-NEXT: ret i64
|
||||
define i64 @test(i3 %arg) {
|
||||
entry:
|
||||
switch i3 %arg, label %Default [
|
||||
i3 -2, label %Label6
|
||||
i3 1, label %Label1
|
||||
i3 2, label %Label2
|
||||
i3 3, label %Label3
|
||||
i3 -4, label %Label4
|
||||
i3 -3, label %Label5
|
||||
]
|
||||
|
||||
Default:
|
||||
%v1 = phi i64 [ 7, %Label6 ], [ 11, %Label5 ], [ 6, %Label4 ], [ 13, %Label3 ], [ 9, %Label2 ], [ 15, %Label1 ], [ 8, %entry ]
|
||||
%v2 = phi i64 [ 0, %Label6 ], [ 0, %Label5 ], [ 0, %Label4 ], [ 0, %Label3 ], [ 0, %Label2 ], [ 0, %Label1 ], [ 0, %entry ]
|
||||
%v3 = add i64 %v1, %v2
|
||||
ret i64 %v3
|
||||
|
||||
Label1:
|
||||
br label %Default
|
||||
|
||||
Label2:
|
||||
br label %Default
|
||||
|
||||
Label3:
|
||||
br label %Default
|
||||
|
||||
Label4:
|
||||
br label %Default
|
||||
|
||||
Label5:
|
||||
br label %Default
|
||||
|
||||
Label6:
|
||||
br label %Default
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
; RUN: opt -S -simplifycfg -switch-to-lookup < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
||||
; rdar://17735071
|
||||
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||
target triple = "x86_64-apple-darwin12.0.0"
|
||||
|
||||
; When tableindex can't fit into i2, we should extend the type to i3.
|
||||
; CHECK-LABEL: @_TFO6reduce1E5toRawfS0_FT_Si
|
||||
; CHECK: entry:
|
||||
; CHECK-NEXT: sub i2 %0, -2
|
||||
; CHECK-NEXT: zext i2 %switch.tableidx to i3
|
||||
; CHECK-NEXT: getelementptr inbounds [4 x i64], [4 x i64]* @switch.table._TFO6reduce1E5toRawfS0_FT_Si, i32 0, i3 %switch.tableidx.zext
|
||||
; CHECK-NEXT: load i64, i64* %switch.gep
|
||||
; CHECK-NEXT: ret i64 %switch.load
|
||||
define i64 @_TFO6reduce1E5toRawfS0_FT_Si(i2) {
|
||||
entry:
|
||||
switch i2 %0, label %1 [
|
||||
i2 0, label %2
|
||||
i2 1, label %3
|
||||
i2 -2, label %4
|
||||
i2 -1, label %5
|
||||
]
|
||||
|
||||
; <label>:1 ; preds = %entry
|
||||
unreachable
|
||||
|
||||
; <label>:2 ; preds = %2
|
||||
br label %6
|
||||
|
||||
; <label>:3 ; preds = %4
|
||||
br label %6
|
||||
|
||||
; <label>:4 ; preds = %6
|
||||
br label %6
|
||||
|
||||
; <label>:5 ; preds = %8
|
||||
br label %6
|
||||
|
||||
; <label>:6 ; preds = %3, %5, %7, %9
|
||||
%7 = phi i64 [ 3, %5 ], [ 2, %4 ], [ 1, %3 ], [ 0, %2 ]
|
||||
ret i64 %7
|
||||
}
|
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user