Home | History | Annotate | Download | only in DeadStoreElimination
      1 ; RUN: opt -S -basicaa -dse < %s | FileCheck %s
      2 
      3 declare i8* @strcpy(i8* %dest, i8* %src) nounwind
      4 define void @test1(i8* %src) {
      5 ; CHECK-LABEL: @test1(
      6   %B = alloca [16 x i8]
      7   %dest = getelementptr inbounds [16 x i8]* %B, i64 0, i64 0
      8 ; CHECK-NOT: @strcpy
      9   %call = call i8* @strcpy(i8* %dest, i8* %src)
     10 ; CHECK: ret void
     11   ret void
     12 }
     13 
     14 declare i8* @strncpy(i8* %dest, i8* %src, i32 %n) nounwind
     15 define void @test2(i8* %src) {
     16 ; CHECK-LABEL: @test2(
     17   %B = alloca [16 x i8]
     18   %dest = getelementptr inbounds [16 x i8]* %B, i64 0, i64 0
     19 ; CHECK-NOT: @strncpy
     20   %call = call i8* @strncpy(i8* %dest, i8* %src, i32 12)
     21 ; CHECK: ret void
     22   ret void
     23 }
     24 
     25 declare i8* @strcat(i8* %dest, i8* %src) nounwind
     26 define void @test3(i8* %src) {
     27 ; CHECK-LABEL: @test3(
     28   %B = alloca [16 x i8]
     29   %dest = getelementptr inbounds [16 x i8]* %B, i64 0, i64 0
     30 ; CHECK-NOT: @strcat
     31   %call = call i8* @strcat(i8* %dest, i8* %src)
     32 ; CHECK: ret void
     33   ret void
     34 }
     35 
     36 declare i8* @strncat(i8* %dest, i8* %src, i32 %n) nounwind
     37 define void @test4(i8* %src) {
     38 ; CHECK-LABEL: @test4(
     39   %B = alloca [16 x i8]
     40   %dest = getelementptr inbounds [16 x i8]* %B, i64 0, i64 0
     41 ; CHECK-NOT: @strncat
     42   %call = call i8* @strncat(i8* %dest, i8* %src, i32 12)
     43 ; CHECK: ret void
     44   ret void
     45 }
     46 
     47 define void @test5(i8* nocapture %src) {
     48 ; CHECK-LABEL: @test5(
     49   %dest = alloca [100 x i8], align 16
     50   %arraydecay = getelementptr inbounds [100 x i8]* %dest, i64 0, i64 0
     51   %call = call i8* @strcpy(i8* %arraydecay, i8* %src)
     52 ; CHECK: %call = call i8* @strcpy
     53   %arrayidx = getelementptr inbounds i8* %call, i64 10
     54   store i8 97, i8* %arrayidx, align 1
     55   ret void
     56 }
     57 
     58 declare void @user(i8* %p)
     59 define void @test6(i8* %src) {
     60 ; CHECK-LABEL: @test6(
     61   %B = alloca [16 x i8]
     62   %dest = getelementptr inbounds [16 x i8]* %B, i64 0, i64 0
     63 ; CHECK: @strcpy
     64   %call = call i8* @strcpy(i8* %dest, i8* %src)
     65 ; CHECK: @user
     66   call void @user(i8* %dest)
     67 ; CHECK: ret void
     68   ret void
     69 }
     70 
     71