blob: 5881367d96108a1311899f666b02245ce5712d7c [file] [log] [blame]
Chris Lattner84d46182010-05-08 22:15:59 +00001; RUN: opt < %s -simplifycfg -S | FileCheck %s
Chris Lattner0934c0f2008-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 Lattner84d46182010-05-08 22:15:59 +00008define void @test1(i32 %x) nounwind {
Chris Lattner0934c0f2008-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
David Blaikiea79ac142015-02-27 21:17:42 +000014 %1 = load volatile i32, i32* null
Chris Lattner0934c0f2008-10-29 17:46:26 +000015 unreachable
Chris Lattner84d46182010-05-08 22:15:59 +000016
Chris Lattner0934c0f2008-10-29 17:46:26 +000017 br label %return
18return: ; preds = %entry
19 ret void
Stephen Linc1c7a132013-07-14 01:42:54 +000020; CHECK-LABEL: @test1(
Eli Friedman02e737b2011-08-12 22:50:01 +000021; CHECK: load volatile
Chris Lattner84d46182010-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
Stephen Linc1c7a132013-07-14 01:42:54 +000030; CHECK-LABEL: @test2(
David Majnemere14e7bc2016-06-25 08:19:55 +000031; CHECK: call void @llvm.trap
Chris Lattner84d46182010-05-08 22:15:59 +000032; CHECK: unreachable
Chris Lattner0934c0f2008-10-29 17:46:26 +000033}
Benjamin Kramer6e42d532010-06-13 16:16:54 +000034
35; PR7369
36define void @test3() nounwind {
37entry:
Eli Friedman02e737b2011-08-12 22:50:01 +000038 store volatile i32 4, i32* null
Benjamin Kramer6e42d532010-06-13 16:16:54 +000039 ret void
40
Stephen Linc1c7a132013-07-14 01:42:54 +000041; CHECK-LABEL: @test3(
Eli Friedman02e737b2011-08-12 22:50:01 +000042; CHECK: store volatile i32 4, i32* null
Benjamin Kramer6e42d532010-06-13 16:16:54 +000043; CHECK: ret
44}
Eli Friedman0ffdf2e2011-08-15 23:59:28 +000045
46; Check store before unreachable.
47define void @test4(i1 %C, i32* %P) {
Stephen Linc1c7a132013-07-14 01:42:54 +000048; CHECK-LABEL: @test4(
Eli Friedman0ffdf2e2011-08-15 23:59:28 +000049; 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) {
Stephen Linc1c7a132013-07-14 01:42:54 +000062; CHECK-LABEL: @test5(
Eli Friedman0ffdf2e2011-08-15 23:59:28 +000063; CHECK: entry:
64; CHECK-NEXT: br i1 %C
65entry:
66 br i1 %C, label %T, label %F
67T:
Tim Northovere94a5182014-03-11 10:48:52 +000068 cmpxchg volatile i32* %P, i32 0, i32 1 seq_cst seq_cst
Eli Friedman0ffdf2e2011-08-15 23:59:28 +000069 unreachable
70F:
71 ret void
72}
73
74; Check atomicrmw before unreachable.
75define void @test6(i1 %C, i32* %P) {
Stephen Linc1c7a132013-07-14 01:42:54 +000076; CHECK-LABEL: @test6(
Eli Friedman0ffdf2e2011-08-15 23:59:28 +000077; 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