Home | History | Annotate | Download | only in Mem2Reg
      1 ; RUN: opt -mem2reg < %s -S | FileCheck %s
      2 
      3 declare i32 @def(i32)
      4 declare i1 @use(i32)
      5 
      6 ; Special case of a single-BB alloca does not apply here since the load
      7 ; is affected by the following store. Expect this case to be identified
      8 ; and a PHI node to be created.
      9 define void @test1() {
     10 ; CHECK-LABEL: @test1(
     11  entry:
     12   %t = alloca i32
     13   br label %loop
     14 
     15  loop:
     16   %v = load i32, i32* %t
     17   %c = call i1 @use(i32 %v)
     18 ; CHECK: [[PHI:%.*]] = phi i32 [ undef, %entry ], [ %n, %loop ]
     19 ; CHECK: call i1 @use(i32 [[PHI]])
     20   %n = call i32 @def(i32 7)
     21   store i32 %n, i32* %t
     22   br i1 %c, label %loop, label %exit
     23 
     24  exit:
     25   ret void
     26 }
     27 
     28 ; Same as above, except there is no following store. The alloca should just be
     29 ; replaced with an undef
     30 define void @test2() {
     31 ; CHECK-LABEL: @test2(
     32  entry:
     33   %t = alloca i32
     34   br label %loop
     35 
     36  loop:
     37   %v = load i32, i32* %t
     38   %c = call i1 @use(i32 %v)
     39 ; CHECK: %c = call i1 @use(i32 undef)
     40   br i1 %c, label %loop, label %exit
     41 
     42  exit:
     43   ret void
     44 }
     45