1; RUN: opt -basicaa -loop-versioning -S < %s | FileCheck %s 2target triple = "x86_64-unknown-linux-gnu" 3 4define void @fill(i8** %ls1.20, i8** %ls2.21, i8* %cse3.22) { 5; CHECK: bb1.lver.check: 6; CHECK: br i1 %memcheck.conflict, label %bb1.ph.lver.orig, label %bb1.ph 7bb1.ph: 8 %ls1.20.promoted = load i8*, i8** %ls1.20 9 %ls2.21.promoted = load i8*, i8** %ls2.21 10 br label %bb1 11 12bb1: 13 %_tmp302 = phi i8* [ %ls2.21.promoted, %bb1.ph ], [ %_tmp30, %bb1 ] 14 %_tmp281 = phi i8* [ %ls1.20.promoted, %bb1.ph ], [ %_tmp28, %bb1 ] 15 %_tmp14 = getelementptr i8, i8* %_tmp281, i16 -1 16 %_tmp15 = load i8, i8* %_tmp14 17 %add = add i8 %_tmp15, 1 18 store i8 %add, i8* %_tmp281 19 store i8 %add, i8* %_tmp302 20 %_tmp28 = getelementptr i8, i8* %_tmp281, i16 1 21 %_tmp30 = getelementptr i8, i8* %_tmp302, i16 1 22 br i1 false, label %bb1, label %bb3.loopexit 23 24bb3.loopexit: 25 %_tmp30.lcssa = phi i8* [ %_tmp30, %bb1 ] 26 %_tmp15.lcssa = phi i8 [ %_tmp15, %bb1 ] 27 %_tmp28.lcssa = phi i8* [ %_tmp28, %bb1 ] 28 store i8* %_tmp28.lcssa, i8** %ls1.20 29 store i8 %_tmp15.lcssa, i8* %cse3.22 30 store i8* %_tmp30.lcssa, i8** %ls2.21 31 br label %bb3 32 33bb3: 34 ret void 35} 36 37define void @fill_no_null_opt(i8** %ls1.20, i8** %ls2.21, i8* %cse3.22) #0 { 38; CHECK-LABEL: fill_no_null_opt( 39; CHECK: bb1.lver.check: 40; CHECK: %lver.safe = or i1 %memcheck.conflict, %{{.*}} 41; CHECK: br i1 %lver.safe, label %bb1.ph.lver.orig, label %bb1.ph 42bb1.ph: 43 %ls1.20.promoted = load i8*, i8** %ls1.20 44 %ls2.21.promoted = load i8*, i8** %ls2.21 45 br label %bb1 46 47bb1: 48 %_tmp302 = phi i8* [ %ls2.21.promoted, %bb1.ph ], [ %_tmp30, %bb1 ] 49 %_tmp281 = phi i8* [ %ls1.20.promoted, %bb1.ph ], [ %_tmp28, %bb1 ] 50 %_tmp14 = getelementptr i8, i8* %_tmp281, i16 -1 51 %_tmp15 = load i8, i8* %_tmp14 52 %add = add i8 %_tmp15, 1 53 store i8 %add, i8* %_tmp281 54 store i8 %add, i8* %_tmp302 55 %_tmp28 = getelementptr i8, i8* %_tmp281, i16 1 56 %_tmp30 = getelementptr i8, i8* %_tmp302, i16 1 57 br i1 false, label %bb1, label %bb3.loopexit 58 59bb3.loopexit: 60 %_tmp30.lcssa = phi i8* [ %_tmp30, %bb1 ] 61 %_tmp15.lcssa = phi i8 [ %_tmp15, %bb1 ] 62 %_tmp28.lcssa = phi i8* [ %_tmp28, %bb1 ] 63 store i8* %_tmp28.lcssa, i8** %ls1.20 64 store i8 %_tmp15.lcssa, i8* %cse3.22 65 store i8* %_tmp30.lcssa, i8** %ls2.21 66 br label %bb3 67 68bb3: 69 ret void 70} 71 72attributes #0 = { "null-pointer-is-valid"="true" } 73