1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=powerpcspe -verify-machineinstrs < %s | FileCheck %s 3 4define void @baz() #0 { 5; CHECK-LABEL: baz: 6; CHECK: # %bb.0: # %bb 7; CHECK-NEXT: mflr 0 8; CHECK-NEXT: stw 0, 4(1) 9; CHECK-NEXT: stwu 1, -48(1) 10; CHECK-NEXT: li 3, .LCPI0_0@l 11; CHECK-NEXT: li 5, .LCPI0_1@l 12; CHECK-NEXT: lis 4, .LCPI0_0@ha 13; CHECK-NEXT: lis 6, .LCPI0_1@ha 14; CHECK-NEXT: evstdd 29, 24(1) # 8-byte Folded Spill 15; CHECK-NEXT: evstdd 30, 32(1) # 8-byte Folded Spill 16; CHECK-NEXT: evlddx 30, 4, 3 17; CHECK-NEXT: # implicit-def: $r3 18; CHECK-NEXT: evlddx 29, 6, 5 19; CHECK-NEXT: evstdd 28, 16(1) # 8-byte Folded Spill 20; CHECK-NEXT: # implicit-def: $r28 21; CHECK-NEXT: .p2align 4 22; CHECK-NEXT: .LBB0_1: # %bb1 23; CHECK-NEXT: # 24; CHECK-NEXT: efdcfsi 8, 3 25; CHECK-NEXT: mr 4, 30 26; CHECK-NEXT: mr 6, 29 27; CHECK-NEXT: evmergehi 3, 30, 30 28; CHECK-NEXT: evmergehi 5, 29, 29 29; CHECK-NEXT: # kill: def $r3 killed $r3 killed $s3 30; CHECK-NEXT: # kill: def $r5 killed $r5 killed $s5 31; CHECK-NEXT: evmergehi 7, 8, 8 32; CHECK-NEXT: # kill: def $r8 killed $r8 killed $s8 33; CHECK-NEXT: # kill: def $r7 killed $r7 killed $s7 34; CHECK-NEXT: bl fma 35; CHECK-NEXT: evmergelo 3, 3, 4 36; CHECK-NEXT: addi 28, 28, 1 37; CHECK-NEXT: cmplwi 28, 0 38; CHECK-NEXT: efdctsiz 3, 3 39; CHECK-NEXT: bne 0, .LBB0_1 40; CHECK-NEXT: # %bb.2: # %bb8 41; CHECK-NEXT: bl wibble 42; CHECK-NEXT: evldd 30, 32(1) # 8-byte Folded Reload 43; CHECK-NEXT: evldd 29, 24(1) # 8-byte Folded Reload 44; CHECK-NEXT: evldd 28, 16(1) # 8-byte Folded Reload 45; CHECK-NEXT: lwz 0, 52(1) 46; CHECK-NEXT: addi 1, 1, 48 47; CHECK-NEXT: mtlr 0 48; CHECK-NEXT: blr 49bb: 50 br label %bb1 51 52bb1: 53 %tmp = phi i32 [ %tmp6, %bb1 ], [ undef, %bb ] 54 %tmp2 = phi i32 [ %tmp3, %bb1 ], [ undef, %bb ] 55 %tmp3 = add nsw i32 %tmp2, 1 56 %tmp4 = sitofp i32 %tmp to double 57 %tmp5 = tail call double @llvm.fmuladd.f64(double 0.000000e+00, double -0.000000e+00, double %tmp4) 58 %tmp6 = fptosi double %tmp5 to i32 59 %tmp7 = icmp eq i32 %tmp2, 0 60 br i1 %tmp7, label %bb8, label %bb1 61 62bb8: 63 call void @wibble(i32 %tmp6) 64 ret void 65} 66 67define void @wombat() #0 { 68; CHECK-LABEL: wombat: 69; CHECK: # %bb.0: # %bb 70; CHECK-NEXT: mflr 0 71; CHECK-NEXT: stw 0, 4(1) 72; CHECK-NEXT: stwu 1, -48(1) 73; CHECK-NEXT: li 3, .LCPI1_0@l 74; CHECK-NEXT: li 5, .LCPI1_1@l 75; CHECK-NEXT: lis 4, .LCPI1_0@ha 76; CHECK-NEXT: lis 6, .LCPI1_1@ha 77; CHECK-NEXT: evstdd 29, 24(1) # 8-byte Folded Spill 78; CHECK-NEXT: evstdd 30, 32(1) # 8-byte Folded Spill 79; CHECK-NEXT: evlddx 30, 4, 3 80; CHECK-NEXT: # implicit-def: $r3 81; CHECK-NEXT: evlddx 29, 6, 5 82; CHECK-NEXT: evstdd 28, 16(1) # 8-byte Folded Spill 83; CHECK-NEXT: # implicit-def: $r28 84; CHECK-NEXT: .p2align 4 85; CHECK-NEXT: .LBB1_1: # %bb1 86; CHECK-NEXT: # 87; CHECK-NEXT: efdcfsi 8, 3 88; CHECK-NEXT: mr 4, 30 89; CHECK-NEXT: mr 6, 29 90; CHECK-NEXT: evmergehi 3, 30, 30 91; CHECK-NEXT: evmergehi 5, 29, 29 92; CHECK-NEXT: # kill: def $r3 killed $r3 killed $s3 93; CHECK-NEXT: # kill: def $r5 killed $r5 killed $s5 94; CHECK-NEXT: evmergehi 7, 8, 8 95; CHECK-NEXT: # kill: def $r8 killed $r8 killed $s8 96; CHECK-NEXT: # kill: def $r7 killed $r7 killed $s7 97; CHECK-NEXT: bl fma 98; CHECK-NEXT: evmergelo 3, 3, 4 99; CHECK-NEXT: addi 28, 28, 1 100; CHECK-NEXT: cmplwi 28, 0 101; CHECK-NEXT: efdctsiz 3, 3 102; CHECK-NEXT: bne 0, .LBB1_1 103; CHECK-NEXT: # %bb.2: # %bb8 104; CHECK-NEXT: bl wibble 105; CHECK-NEXT: evldd 30, 32(1) # 8-byte Folded Reload 106; CHECK-NEXT: evldd 29, 24(1) # 8-byte Folded Reload 107; CHECK-NEXT: evldd 28, 16(1) # 8-byte Folded Reload 108; CHECK-NEXT: lwz 0, 52(1) 109; CHECK-NEXT: addi 1, 1, 48 110; CHECK-NEXT: mtlr 0 111; CHECK-NEXT: blr 112bb: 113 br label %bb1 114 115bb1: 116 %tmp = phi i32 [ %tmp6, %bb1 ], [ undef, %bb ] 117 %tmp2 = phi i32 [ %tmp3, %bb1 ], [ undef, %bb ] 118 %tmp3 = add nsw i32 %tmp2, 1 119 %tmp4 = sitofp i32 %tmp to double 120 %tmp5 = tail call double @llvm.fma.f64(double 0.000000e+00, double -0.000000e+00, double %tmp4) 121 %tmp6 = fptosi double %tmp5 to i32 122 %tmp7 = icmp eq i32 %tmp2, 0 123 br i1 %tmp7, label %bb8, label %bb1 124 125bb8: 126 call void @wibble(i32 %tmp6) 127 ret void 128} 129 130declare void @wibble(i32) 131declare double @llvm.fmuladd.f64(double, double, double) 132declare double @llvm.fma.f64(double, double, double) 133 134attributes #0 = { nounwind } 135