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