| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -passes=newgvn -S %s | FileCheck %s |
| target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" |
| declare noalias i8* @_Znam(i64) #1 |
| |
| define i32 @TestNoAsan() { |
| ; CHECK-LABEL: @TestNoAsan( |
| ; CHECK-NEXT: [[TMP1:%.*]] = tail call noalias ptr @_Znam(i64 2) |
| ; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 1 |
| ; CHECK-NEXT: store i8 0, ptr [[TMP2]], align 1 |
| ; CHECK-NEXT: store i8 0, ptr [[TMP1]], align 1 |
| ; CHECK-NEXT: [[TMP3:%.*]] = load i16, ptr [[TMP1]], align 4 |
| ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i16 [[TMP3]], 0 |
| ; CHECK-NEXT: br i1 [[TMP4]], label [[TMP9:%.*]], label [[TMP5:%.*]] |
| ; CHECK: 5: |
| ; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 2 |
| ; CHECK-NEXT: [[TMP7:%.*]] = load i16, ptr [[TMP6]], align 2 |
| ; CHECK-NEXT: [[TMP8:%.*]] = sext i16 [[TMP7]] to i32 |
| ; CHECK-NEXT: br label [[TMP9]] |
| ; CHECK: 9: |
| ; CHECK-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP5]] ], [ 0, [[TMP0:%.*]] ] |
| ; CHECK-NEXT: ret i32 [[TMP10]] |
| ; |
| %1 = tail call noalias ptr @_Znam(i64 2) |
| %2 = getelementptr inbounds i8, ptr %1, i64 1 |
| store i8 0, ptr %2, align 1 |
| store i8 0, ptr %1, align 1 |
| %3 = load i16, ptr %1, align 4 |
| %4 = icmp eq i16 %3, 0 |
| br i1 %4, label %9, label %5 |
| |
| ; <label>:5 ; preds = %0 |
| %6 = getelementptr inbounds i8, ptr %1, i64 2 |
| %7 = load i16, ptr %6, align 2 |
| %8 = sext i16 %7 to i32 |
| br label %9 |
| |
| ; <label>:9 ; preds = %0, %5 |
| %10 = phi i32 [ %8, %5 ], [ 0, %0 ] |
| ret i32 %10 |
| } |
| |
| define i32 @TestAsan() sanitize_address { |
| ; CHECK-LABEL: @TestAsan( |
| ; CHECK-NEXT: [[TMP1:%.*]] = tail call noalias ptr @_Znam(i64 2) |
| ; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 1 |
| ; CHECK-NEXT: store i8 0, ptr [[TMP2]], align 1 |
| ; CHECK-NEXT: store i8 0, ptr [[TMP1]], align 1 |
| ; CHECK-NEXT: [[TMP3:%.*]] = load i16, ptr [[TMP1]], align 4 |
| ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i16 [[TMP3]], 0 |
| ; CHECK-NEXT: br i1 [[TMP4]], label [[TMP9:%.*]], label [[TMP5:%.*]] |
| ; CHECK: 5: |
| ; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 2 |
| ; CHECK-NEXT: [[TMP7:%.*]] = load i16, ptr [[TMP6]], align 2 |
| ; CHECK-NEXT: [[TMP8:%.*]] = sext i16 [[TMP7]] to i32 |
| ; CHECK-NEXT: br label [[TMP9]] |
| ; CHECK: 9: |
| ; CHECK-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP5]] ], [ 0, [[TMP0:%.*]] ] |
| ; CHECK-NEXT: ret i32 [[TMP10]] |
| ; |
| %1 = tail call noalias ptr @_Znam(i64 2) |
| %2 = getelementptr inbounds i8, ptr %1, i64 1 |
| store i8 0, ptr %2, align 1 |
| store i8 0, ptr %1, align 1 |
| %3 = load i16, ptr %1, align 4 |
| %4 = icmp eq i16 %3, 0 |
| br i1 %4, label %9, label %5 |
| |
| ; <label>:5 ; preds = %0 |
| %6 = getelementptr inbounds i8, ptr %1, i64 2 |
| %7 = load i16, ptr %6, align 2 |
| %8 = sext i16 %7 to i32 |
| br label %9 |
| |
| ; <label>:9 ; preds = %0, %5 |
| %10 = phi i32 [ %8, %5 ], [ 0, %0 ] |
| ret i32 %10 |
| } |
| |
| define i32 @TestHWAsan() sanitize_hwaddress { |
| ; CHECK-LABEL: @TestHWAsan( |
| ; CHECK-NEXT: [[TMP1:%.*]] = tail call noalias ptr @_Znam(i64 2) |
| ; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 1 |
| ; CHECK-NEXT: store i8 0, ptr [[TMP2]], align 1 |
| ; CHECK-NEXT: store i8 0, ptr [[TMP1]], align 1 |
| ; CHECK-NEXT: [[TMP3:%.*]] = load i16, ptr [[TMP1]], align 4 |
| ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i16 [[TMP3]], 0 |
| ; CHECK-NEXT: br i1 [[TMP4]], label [[TMP9:%.*]], label [[TMP5:%.*]] |
| ; CHECK: 5: |
| ; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 2 |
| ; CHECK-NEXT: [[TMP7:%.*]] = load i16, ptr [[TMP6]], align 2 |
| ; CHECK-NEXT: [[TMP8:%.*]] = sext i16 [[TMP7]] to i32 |
| ; CHECK-NEXT: br label [[TMP9]] |
| ; CHECK: 9: |
| ; CHECK-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP5]] ], [ 0, [[TMP0:%.*]] ] |
| ; CHECK-NEXT: ret i32 [[TMP10]] |
| ; |
| %1 = tail call noalias ptr @_Znam(i64 2) |
| %2 = getelementptr inbounds i8, ptr %1, i64 1 |
| store i8 0, ptr %2, align 1 |
| store i8 0, ptr %1, align 1 |
| %3 = load i16, ptr %1, align 4 |
| %4 = icmp eq i16 %3, 0 |
| br i1 %4, label %9, label %5 |
| |
| ; <label>:5 ; preds = %0 |
| %6 = getelementptr inbounds i8, ptr %1, i64 2 |
| %7 = load i16, ptr %6, align 2 |
| %8 = sext i16 %7 to i32 |
| br label %9 |
| |
| ; <label>:9 ; preds = %0, %5 |
| %10 = phi i32 [ %8, %5 ], [ 0, %0 ] |
| ret i32 %10 |
| } |