xref: /llvm-project/llvm/test/Transforms/SimplifyCFG/speculate-store-opaque-pointer.ll (revision edb2fc6dab2cf04779959829434e9e8572d48a26)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
3
4declare void @unknown_fun()
5
6define void @different_type(ptr %ptr, i1 %cmp) {
7; CHECK-LABEL: @different_type(
8; CHECK-NEXT:    store i32 0, ptr [[PTR:%.*]], align 4
9; CHECK-NEXT:    br i1 [[CMP:%.*]], label [[IF_THEN:%.*]], label [[RET_END:%.*]]
10; CHECK:       if.then:
11; CHECK-NEXT:    store i64 1, ptr [[PTR]], align 4
12; CHECK-NEXT:    br label [[RET_END]]
13; CHECK:       ret.end:
14; CHECK-NEXT:    ret void
15;
16  store i32 0, ptr %ptr
17  br i1 %cmp, label %if.then, label %ret.end
18
19if.then:
20  store i64 1, ptr %ptr
21  br label %ret.end
22
23ret.end:
24  ret void
25}
26
27define void @readonly_call(ptr %ptr, i1 %cmp) {
28; CHECK-LABEL: @readonly_call(
29; CHECK-NEXT:  ret.end:
30; CHECK-NEXT:    store i32 0, ptr [[PTR:%.*]], align 4
31; CHECK-NEXT:    call void @unknown_fun() #[[ATTR0:[0-9]+]]
32; CHECK-NEXT:    [[SPEC_STORE_SELECT:%.*]] = select i1 [[CMP:%.*]], i32 1, i32 0
33; CHECK-NEXT:    store i32 [[SPEC_STORE_SELECT]], ptr [[PTR]], align 4
34; CHECK-NEXT:    ret void
35;
36  store i32 0, ptr %ptr
37  call void @unknown_fun() readonly
38  br i1 %cmp, label %if.then, label %ret.end
39
40if.then:
41  store i32 1, ptr %ptr
42  br label %ret.end
43
44ret.end:
45  ret void
46}
47
48define void @atomic_and_simple(ptr %ptr, i1 %cmp) {
49; CHECK-LABEL: @atomic_and_simple(
50; CHECK-NEXT:    store atomic i32 0, ptr [[PTR:%.*]] seq_cst, align 4
51; CHECK-NEXT:    br i1 [[CMP:%.*]], label [[IF_THEN:%.*]], label [[RET_END:%.*]]
52; CHECK:       if.then:
53; CHECK-NEXT:    store i32 1, ptr [[PTR]], align 4
54; CHECK-NEXT:    br label [[RET_END]]
55; CHECK:       ret.end:
56; CHECK-NEXT:    ret void
57;
58  store atomic i32 0, ptr %ptr seq_cst, align 4
59  br i1 %cmp, label %if.then, label %ret.end
60
61if.then:
62  store i32 1, ptr %ptr
63  br label %ret.end
64
65ret.end:
66  ret void
67}
68