blob: 10d6981af0e67b3eee65f5d55c3d96e1f18ab5b1 [file] [log] [blame]
Chris Lattnerc7d7e0c2010-05-08 22:15:59 +00001; RUN: opt < %s -simplifycfg -S | FileCheck %s
Chris Lattnerf8131c92008-10-29 17:46:26 +00002; PR2967
3
4target datalayout =
5"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32"
6target triple = "i386-pc-linux-gnu"
7
Chris Lattnerc7d7e0c2010-05-08 22:15:59 +00008define void @test1(i32 %x) nounwind {
Chris Lattnerf8131c92008-10-29 17:46:26 +00009entry:
10 %0 = icmp eq i32 %x, 0 ; <i1> [#uses=1]
11 br i1 %0, label %bb, label %return
12
13bb: ; preds = %entry
Eli Friedmanf03bb262011-08-12 22:50:01 +000014 %1 = load volatile i32* null
Chris Lattnerf8131c92008-10-29 17:46:26 +000015 unreachable
Chris Lattnerc7d7e0c2010-05-08 22:15:59 +000016
Chris Lattnerf8131c92008-10-29 17:46:26 +000017 br label %return
18return: ; preds = %entry
19 ret void
Chris Lattnerc7d7e0c2010-05-08 22:15:59 +000020; CHECK: @test1
Eli Friedmanf03bb262011-08-12 22:50:01 +000021; CHECK: load volatile
Chris Lattnerc7d7e0c2010-05-08 22:15:59 +000022}
23
24; rdar://7958343
25define void @test2() nounwind {
26entry:
27 store i32 4,i32* null
28 ret void
29
30; CHECK: @test2
31; CHECK: call void @llvm.trap
32; CHECK: unreachable
Chris Lattnerf8131c92008-10-29 17:46:26 +000033}
Benjamin Kramerc125fed2010-06-13 16:16:54 +000034
35; PR7369
36define void @test3() nounwind {
37entry:
Eli Friedmanf03bb262011-08-12 22:50:01 +000038 store volatile i32 4, i32* null
Benjamin Kramerc125fed2010-06-13 16:16:54 +000039 ret void
40
41; CHECK: @test3
Eli Friedmanf03bb262011-08-12 22:50:01 +000042; CHECK: store volatile i32 4, i32* null
Benjamin Kramerc125fed2010-06-13 16:16:54 +000043; CHECK: ret
44}
Eli Friedman81763882011-08-15 23:59:28 +000045
46; Check store before unreachable.
47define void @test4(i1 %C, i32* %P) {
48; CHECK: @test4
49; CHECK: entry:
50; CHECK-NEXT: br i1 %C
51entry:
52 br i1 %C, label %T, label %F
53T:
54 store volatile i32 0, i32* %P
55 unreachable
56F:
57 ret void
58}
59
60; Check cmpxchg before unreachable.
61define void @test5(i1 %C, i32* %P) {
62; CHECK: @test5
63; CHECK: entry:
64; CHECK-NEXT: br i1 %C
65entry:
66 br i1 %C, label %T, label %F
67T:
68 cmpxchg volatile i32* %P, i32 0, i32 1 seq_cst
69 unreachable
70F:
71 ret void
72}
73
74; Check atomicrmw before unreachable.
75define void @test6(i1 %C, i32* %P) {
76; CHECK: @test6
77; CHECK: entry:
78; CHECK-NEXT: br i1 %C
79entry:
80 br i1 %C, label %T, label %F
81T:
82 atomicrmw volatile xchg i32* %P, i32 0 seq_cst
83 unreachable
84F:
85 ret void
86}
87