• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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: %[[LOAD:[^ ]+]] = load i32
29; CHECK: {{.*}} = ashr i32 %[[LOAD]]
30; CHECK-NOT: {{.*}} = phi
31
32define i32 @TestAsan() sanitize_address {
33  %1 = tail call noalias i8* @_Znam(i64 2)
34  %2 = getelementptr inbounds i8, i8* %1, i64 1
35  store i8 0, i8* %2, align 1
36  store i8 0, i8* %1, align 1
37  %3 = bitcast i8* %1 to i16*
38  %4 = load i16, i16* %3, align 4
39  %5 = icmp eq i16 %4, 0
40  br i1 %5, label %11, label %6
41
42; <label>:6                                       ; preds = %0
43  %7 = getelementptr inbounds i8, i8* %1, i64 2
44  %8 = bitcast i8* %7 to i16*
45  %9 = load i16, i16* %8, align 2
46  %10 = sext i16 %9 to i32
47  br label %11
48
49; <label>:11                                      ; preds = %0, %6
50  %12 = phi i32 [ %10, %6 ], [ 0, %0 ]
51  ret i32 %12
52}
53
54; CHECK-LABEL: @TestAsan
55; CHECK-NOT: %[[LOAD:[^ ]+]] = load i32
56; CHECK: {{.*}} = phi
57
58