1; RUN: opt -O3 -S %s | FileCheck %s
2target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
3declare noalias i8* @_Znam(i64) #1
4
5define i32 @TestNoAsan() {
6  %1 = tail call noalias i8* @_Znam(i64 2)
7  %2 = getelementptr inbounds i8, i8* %1, i64 1
8  store i8 0, i8* %2, align 1
9  store i8 0, i8* %1, align 1
10  %3 = bitcast i8* %1 to i16*
11  %4 = load i16, i16* %3, align 4
12  %5 = icmp eq i16 %4, 0
13  br i1 %5, label %11, label %6
14
15; <label>:6                                       ; preds = %0
16  %7 = getelementptr inbounds i8, i8* %1, i64 2
17  %8 = bitcast i8* %7 to i16*
18  %9 = load i16, i16* %8, align 2
19  %10 = sext i16 %9 to i32
20  br label %11
21
22; <label>:11                                      ; preds = %0, %6
23  %12 = phi i32 [ %10, %6 ], [ 0, %0 ]
24  ret i32 %12
25}
26
27; CHECK-LABEL: @TestNoAsan
28; CHECK: ret i32 0
29
30define i32 @TestAsan() sanitize_address {
31  %1 = tail call noalias i8* @_Znam(i64 2)
32  %2 = getelementptr inbounds i8, i8* %1, i64 1
33  store i8 0, i8* %2, align 1
34  store i8 0, i8* %1, align 1
35  %3 = bitcast i8* %1 to i16*
36  %4 = load i16, i16* %3, align 4
37  %5 = icmp eq i16 %4, 0
38  br i1 %5, label %11, label %6
39
40; <label>:6                                       ; preds = %0
41  %7 = getelementptr inbounds i8, i8* %1, i64 2
42  %8 = bitcast i8* %7 to i16*
43  %9 = load i16, i16* %8, align 2
44  %10 = sext i16 %9 to i32
45  br label %11
46
47; <label>:11                                      ; preds = %0, %6
48  %12 = phi i32 [ %10, %6 ], [ 0, %0 ]
49  ret i32 %12
50}
51
52; CHECK-LABEL: @TestAsan
53; CHECK-NOT: %[[LOAD:[^ ]+]] = load i32
54; CHECK: {{.*}} = phi
55
56
57define i32 @TestHWAsan() sanitize_hwaddress {
58  %1 = tail call noalias i8* @_Znam(i64 2)
59  %2 = getelementptr inbounds i8, i8* %1, i64 1
60  store i8 0, i8* %2, align 1
61  store i8 0, i8* %1, align 1
62  %3 = bitcast i8* %1 to i16*
63  %4 = load i16, i16* %3, align 4
64  %5 = icmp eq i16 %4, 0
65  br i1 %5, label %11, label %6
66
67; <label>:6                                       ; preds = %0
68  %7 = getelementptr inbounds i8, i8* %1, i64 2
69  %8 = bitcast i8* %7 to i16*
70  %9 = load i16, i16* %8, align 2
71  %10 = sext i16 %9 to i32
72  br label %11
73
74; <label>:11                                      ; preds = %0, %6
75  %12 = phi i32 [ %10, %6 ], [ 0, %0 ]
76  ret i32 %12
77}
78
79; CHECK-LABEL: @TestHWAsan
80; CHECK-NOT: %[[LOAD:[^ ]+]] = load i32
81; CHECK: {{.*}} = phi
82
83