1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 2; RUN: opt -S -passes=newgvn < %s | FileCheck %s 3; PR13694 4 5target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 6target triple = "x86_64-apple-macosx10.8.0" 7 8declare ptr @malloc(i64) nounwind allockind("alloc,uninitialized") allocsize(0) "alloc-family"="malloc" 9 10define noalias ptr @test1() nounwind uwtable ssp { 11; CHECK-LABEL: define noalias ptr @test1( 12; CHECK-SAME: ) #[[ATTR1:[0-9]+]] { 13; CHECK-NEXT: entry: 14; CHECK-NEXT: [[CALL:%.*]] = tail call ptr @malloc(i64 100) #[[ATTR2:[0-9]+]] 15; CHECK-NEXT: br i1 undef, label [[IF_END:%.*]], label [[IF_THEN:%.*]] 16; CHECK: if.then: 17; CHECK-NEXT: store i8 0, ptr [[CALL]], align 1 18; CHECK-NEXT: br label [[IF_END]] 19; CHECK: if.end: 20; CHECK-NEXT: ret ptr [[CALL]] 21; 22entry: 23 %call = tail call ptr @malloc(i64 100) nounwind 24 %0 = load i8, ptr %call, align 1 25 %tobool = icmp eq i8 %0, 0 26 br i1 %tobool, label %if.end, label %if.then 27 28if.then: ; preds = %entry 29 store i8 0, ptr %call, align 1 30 br label %if.end 31 32if.end: ; preds = %if.then, %entry 33 ret ptr %call 34 35} 36 37declare ptr @_Znwm(i64) nounwind 38 39define noalias ptr @test2() nounwind uwtable ssp { 40; CHECK-LABEL: define noalias ptr @test2( 41; CHECK-SAME: ) #[[ATTR1]] { 42; CHECK-NEXT: entry: 43; CHECK-NEXT: [[CALL:%.*]] = tail call ptr @_Znwm(i64 100) #[[ATTR2]] 44; CHECK-NEXT: br i1 undef, label [[IF_END:%.*]], label [[IF_THEN:%.*]] 45; CHECK: if.then: 46; CHECK-NEXT: store i8 0, ptr [[CALL]], align 1 47; CHECK-NEXT: br label [[IF_END]] 48; CHECK: if.end: 49; CHECK-NEXT: ret ptr [[CALL]] 50; 51entry: 52 %call = tail call ptr @_Znwm(i64 100) nounwind 53 %0 = load i8, ptr %call, align 1 54 %tobool = icmp eq i8 %0, 0 55 br i1 %tobool, label %if.end, label %if.then 56 57if.then: ; preds = %entry 58 store i8 0, ptr %call, align 1 59 br label %if.end 60 61if.end: ; preds = %if.then, %entry 62 ret ptr %call 63 64} 65 66declare ptr @aligned_alloc(i64 allocalign, i64) nounwind allockind("alloc,uninitialized,aligned") allocsize(1) "alloc-family"="malloc" 67 68define noalias ptr @test3() nounwind uwtable ssp { 69; CHECK-LABEL: define noalias ptr @test3( 70; CHECK-SAME: ) #[[ATTR1]] { 71; CHECK-NEXT: entry: 72; CHECK-NEXT: [[CALL:%.*]] = tail call ptr @aligned_alloc(i64 256, i64 32) #[[ATTR2]] 73; CHECK-NEXT: br i1 undef, label [[IF_END:%.*]], label [[IF_THEN:%.*]] 74; CHECK: if.then: 75; CHECK-NEXT: store i8 0, ptr [[CALL]], align 1 76; CHECK-NEXT: br label [[IF_END]] 77; CHECK: if.end: 78; CHECK-NEXT: ret ptr [[CALL]] 79; 80entry: 81 %call = tail call ptr @aligned_alloc(i64 256, i64 32) nounwind 82 %0 = load i8, ptr %call, align 32 83 %tobool = icmp eq i8 %0, 0 84 br i1 %tobool, label %if.end, label %if.then 85 86if.then: ; preds = %entry 87 store i8 0, ptr %call, align 1 88 br label %if.end 89 90if.end: ; preds = %if.then, %entry 91 ret ptr %call 92 93} 94