~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Transforms/SimplifyCFG/duplicate-landingpad.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: opt < %s -simplifycfg -S | FileCheck %s
 
2
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 
3
 
 
4
declare i32 @__gxx_personality_v0(...)
 
5
declare void @fn()
 
6
 
 
7
 
 
8
; CHECK-LABEL: @test1
 
9
define void @test1() personality i32 (...)* @__gxx_personality_v0 {
 
10
entry:
 
11
; CHECK-LABEL: entry:
 
12
; CHECK: to label %invoke2 unwind label %lpad2
 
13
  invoke void @fn()
 
14
    to label %invoke2 unwind label %lpad1
 
15
 
 
16
invoke2:
 
17
; CHECK-LABEL: invoke2:
 
18
; CHECK: to label %invoke.cont unwind label %lpad2
 
19
  invoke void @fn()
 
20
    to label %invoke.cont unwind label %lpad2
 
21
 
 
22
invoke.cont:
 
23
  ret void
 
24
 
 
25
lpad1:
 
26
  %exn = landingpad {i8*, i32}
 
27
         cleanup
 
28
  br label %shared_resume
 
29
 
 
30
lpad2:
 
31
; CHECK-LABEL: lpad2:
 
32
; CHECK: landingpad { i8*, i32 }
 
33
; CHECK-NEXT: cleanup
 
34
; CHECK-NEXT: call void @fn()
 
35
; CHECK-NEXT: ret void
 
36
  %exn2 = landingpad {i8*, i32}
 
37
          cleanup
 
38
  br label %shared_resume
 
39
 
 
40
shared_resume:
 
41
  call void @fn()
 
42
  ret void
 
43
}
 
44
 
 
45
; Don't trigger if blocks aren't the same/empty
 
46
define void @neg1() personality i32 (...)* @__gxx_personality_v0 {
 
47
; CHECK-LABEL: @neg1
 
48
entry:
 
49
; CHECK-LABEL: entry:
 
50
; CHECK: to label %invoke2 unwind label %lpad1
 
51
  invoke void @fn()
 
52
    to label %invoke2 unwind label %lpad1
 
53
 
 
54
invoke2:
 
55
; CHECK-LABEL: invoke2:
 
56
; CHECK: to label %invoke.cont unwind label %lpad2
 
57
  invoke void @fn()
 
58
    to label %invoke.cont unwind label %lpad2
 
59
 
 
60
invoke.cont:
 
61
  ret void
 
62
 
 
63
lpad1:
 
64
  %exn = landingpad {i8*, i32}
 
65
         filter [0 x i8*] zeroinitializer
 
66
  call void @fn()
 
67
  br label %shared_resume
 
68
 
 
69
lpad2:
 
70
  %exn2 = landingpad {i8*, i32}
 
71
          cleanup
 
72
  br label %shared_resume
 
73
 
 
74
shared_resume:
 
75
  call void @fn()
 
76
  ret void
 
77
}
 
78
 
 
79
; Should not trigger when the landing pads are not the exact same
 
80
define void @neg2() personality i32 (...)* @__gxx_personality_v0 {
 
81
; CHECK-LABEL: @neg2
 
82
entry:
 
83
; CHECK-LABEL: entry:
 
84
; CHECK: to label %invoke2 unwind label %lpad1
 
85
  invoke void @fn()
 
86
    to label %invoke2 unwind label %lpad1
 
87
 
 
88
invoke2:
 
89
; CHECK-LABEL: invoke2:
 
90
; CHECK: to label %invoke.cont unwind label %lpad2
 
91
  invoke void @fn()
 
92
    to label %invoke.cont unwind label %lpad2
 
93
 
 
94
invoke.cont:
 
95
  ret void
 
96
 
 
97
lpad1:
 
98
  %exn = landingpad {i8*, i32}
 
99
         filter [0 x i8*] zeroinitializer
 
100
  br label %shared_resume
 
101
 
 
102
lpad2:
 
103
  %exn2 = landingpad {i8*, i32}
 
104
          cleanup
 
105
  br label %shared_resume
 
106
 
 
107
shared_resume:
 
108
  call void @fn()
 
109
  ret void
 
110
}