Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s
      2 ; This tests currently fails as MachineLICM does not compute register pressure
      3 ; correctly. More details: llvm.org/PR23143
      4 ; XFAIL: *
      5 
      6 ; MachineLICM should take register pressure into account.
      7 ; CHECK-NOT: Spill
      8 
      9 %struct.A = type { i32, i32, i32, i32, i32, i32, i32 }
     10 
     11 define void @test(i1 %b, %struct.A* %a) nounwind {
     12 entry:
     13   br label %loop-header
     14 
     15 loop-header:
     16   br label %loop-body
     17 
     18 loop-body:
     19   %0 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 0
     20   %1 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 1
     21   %2 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 2
     22   %3 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 3
     23   %4 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 4
     24   %5 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 5
     25   %6 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 6
     26   call void @assign(i32* %0)
     27   call void @assign(i32* %1)
     28   call void @assign(i32* %2)
     29   call void @assign(i32* %3)
     30   call void @assign(i32* %4)
     31   call void @assign(i32* %5)
     32   call void @assign(i32* %6)
     33   br i1 %b, label %loop-body, label %loop-exit
     34 
     35 loop-exit:
     36   ret void
     37 }
     38 
     39 declare void @assign(i32*)
     40