1*c5abcb05SEvgenii Kudriashov; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*c5abcb05SEvgenii Kudriashov; RUN: llc -mtriple=i686-linux-gnu -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X86 3*c5abcb05SEvgenii Kudriashov; RUN: llc -mtriple=i686-linux-gnu -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X86 4*c5abcb05SEvgenii Kudriashov; TODO: enable when x87 is supported 5*c5abcb05SEvgenii Kudriashov; llc -mtriple=i686-linux-gnu -global-isel -global-isel-abort=1 -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X86,GLOBAL-X86 6*c5abcb05SEvgenii Kudriashov; RUN: llc -mtriple=x86_64-linux-gnu -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X64,DAG-X64 7*c5abcb05SEvgenii Kudriashov; RUN: llc -mtriple=x86_64-linux-gnu -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X64,DAG-X64 8*c5abcb05SEvgenii Kudriashov; RUN: llc -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=1 -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X64,GLOBAL-X64 9*c5abcb05SEvgenii Kudriashov 10*c5abcb05SEvgenii Kudriashovdefine i1 @test_i1(i1 %a, i1 %b, i1 %c, i1 %pred0, i1 %pred1) { 11*c5abcb05SEvgenii Kudriashov; X86-LABEL: test_i1: 12*c5abcb05SEvgenii Kudriashov; X86: # %bb.0: # %entry 13*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 14*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB0_1 15*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.2: # %cond 16*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 17*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB0_4 18*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.3: 19*c5abcb05SEvgenii Kudriashov; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 20*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 21*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB0_1: 22*c5abcb05SEvgenii Kudriashov; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 23*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 24*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB0_4: # %cond.false 25*c5abcb05SEvgenii Kudriashov; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 26*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 27*c5abcb05SEvgenii Kudriashov; 28*c5abcb05SEvgenii Kudriashov; X64-LABEL: test_i1: 29*c5abcb05SEvgenii Kudriashov; X64: # %bb.0: # %entry 30*c5abcb05SEvgenii Kudriashov; X64-NEXT: testb $1, %cl 31*c5abcb05SEvgenii Kudriashov; X64-NEXT: je .LBB0_1 32*c5abcb05SEvgenii Kudriashov; X64-NEXT: # %bb.2: # %cond 33*c5abcb05SEvgenii Kudriashov; X64-NEXT: movl %esi, %eax 34*c5abcb05SEvgenii Kudriashov; X64-NEXT: testb $1, %r8b 35*c5abcb05SEvgenii Kudriashov; X64-NEXT: jne .LBB0_4 36*c5abcb05SEvgenii Kudriashov; X64-NEXT: # %bb.3: # %cond.false 37*c5abcb05SEvgenii Kudriashov; X64-NEXT: movl %edx, %eax 38*c5abcb05SEvgenii Kudriashov; X64-NEXT: .LBB0_4: # %cond.end 39*c5abcb05SEvgenii Kudriashov; X64-NEXT: # kill: def $al killed $al killed $eax 40*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 41*c5abcb05SEvgenii Kudriashov; X64-NEXT: .LBB0_1: 42*c5abcb05SEvgenii Kudriashov; X64-NEXT: movl %edi, %eax 43*c5abcb05SEvgenii Kudriashov; X64-NEXT: # kill: def $al killed $al killed $eax 44*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 45*c5abcb05SEvgenii Kudriashoventry: 46*c5abcb05SEvgenii Kudriashov br i1 %pred0, label %cond, label %cond.end 47*c5abcb05SEvgenii Kudriashov 48*c5abcb05SEvgenii Kudriashovcond: 49*c5abcb05SEvgenii Kudriashov br i1 %pred1, label %cond.true, label %cond.false 50*c5abcb05SEvgenii Kudriashov 51*c5abcb05SEvgenii Kudriashovcond.true: 52*c5abcb05SEvgenii Kudriashov br label %cond.end 53*c5abcb05SEvgenii Kudriashov 54*c5abcb05SEvgenii Kudriashovcond.false: 55*c5abcb05SEvgenii Kudriashov br label %cond.end 56*c5abcb05SEvgenii Kudriashov 57*c5abcb05SEvgenii Kudriashovcond.end: 58*c5abcb05SEvgenii Kudriashov %res = phi i1 [ %a, %entry ], [ %b, %cond.true ], [ %c, %cond.false ] 59*c5abcb05SEvgenii Kudriashov ret i1 %res 60*c5abcb05SEvgenii Kudriashov} 61*c5abcb05SEvgenii Kudriashov 62*c5abcb05SEvgenii Kudriashovdefine i8 @test_i8(i8 %f, i8 %t, i1 %pred) { 63*c5abcb05SEvgenii Kudriashov; X86-LABEL: test_i8: 64*c5abcb05SEvgenii Kudriashov; X86: # %bb.0: # %entry 65*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 66*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB1_2 67*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.1: 68*c5abcb05SEvgenii Kudriashov; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 69*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 70*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB1_2: # %cond.false 71*c5abcb05SEvgenii Kudriashov; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 72*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 73*c5abcb05SEvgenii Kudriashov; 74*c5abcb05SEvgenii Kudriashov; X64-LABEL: test_i8: 75*c5abcb05SEvgenii Kudriashov; X64: # %bb.0: # %entry 76*c5abcb05SEvgenii Kudriashov; X64-NEXT: testb $1, %dl 77*c5abcb05SEvgenii Kudriashov; X64-NEXT: je .LBB1_2 78*c5abcb05SEvgenii Kudriashov; X64-NEXT: # %bb.1: 79*c5abcb05SEvgenii Kudriashov; X64-NEXT: movl %edi, %eax 80*c5abcb05SEvgenii Kudriashov; X64-NEXT: # kill: def $al killed $al killed $eax 81*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 82*c5abcb05SEvgenii Kudriashov; X64-NEXT: .LBB1_2: # %cond.false 83*c5abcb05SEvgenii Kudriashov; X64-NEXT: movl %esi, %eax 84*c5abcb05SEvgenii Kudriashov; X64-NEXT: # kill: def $al killed $al killed $eax 85*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 86*c5abcb05SEvgenii Kudriashoventry: 87*c5abcb05SEvgenii Kudriashov br i1 %pred, label %cond.true, label %cond.false 88*c5abcb05SEvgenii Kudriashov 89*c5abcb05SEvgenii Kudriashovcond.true: ; preds = %entry 90*c5abcb05SEvgenii Kudriashov br label %cond.end 91*c5abcb05SEvgenii Kudriashov 92*c5abcb05SEvgenii Kudriashovcond.false: ; preds = %entry 93*c5abcb05SEvgenii Kudriashov br label %cond.end 94*c5abcb05SEvgenii Kudriashov 95*c5abcb05SEvgenii Kudriashovcond.end: ; preds = %cond.false, %cond.true 96*c5abcb05SEvgenii Kudriashov %cond = phi i8 [ %f, %cond.true ], [ %t, %cond.false ] 97*c5abcb05SEvgenii Kudriashov ret i8 %cond 98*c5abcb05SEvgenii Kudriashov} 99*c5abcb05SEvgenii Kudriashov 100*c5abcb05SEvgenii Kudriashovdefine i16 @test_i16(i16 %f, i16 %t, i1 %pred) { 101*c5abcb05SEvgenii Kudriashov; X86-LABEL: test_i16: 102*c5abcb05SEvgenii Kudriashov; X86: # %bb.0: # %entry 103*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 104*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB2_2 105*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.1: 106*c5abcb05SEvgenii Kudriashov; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 107*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 108*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB2_2: # %cond.false 109*c5abcb05SEvgenii Kudriashov; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 110*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 111*c5abcb05SEvgenii Kudriashov; 112*c5abcb05SEvgenii Kudriashov; X64-LABEL: test_i16: 113*c5abcb05SEvgenii Kudriashov; X64: # %bb.0: # %entry 114*c5abcb05SEvgenii Kudriashov; X64-NEXT: testb $1, %dl 115*c5abcb05SEvgenii Kudriashov; X64-NEXT: je .LBB2_2 116*c5abcb05SEvgenii Kudriashov; X64-NEXT: # %bb.1: 117*c5abcb05SEvgenii Kudriashov; X64-NEXT: movl %edi, %eax 118*c5abcb05SEvgenii Kudriashov; X64-NEXT: # kill: def $ax killed $ax killed $eax 119*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 120*c5abcb05SEvgenii Kudriashov; X64-NEXT: .LBB2_2: # %cond.false 121*c5abcb05SEvgenii Kudriashov; X64-NEXT: movl %esi, %eax 122*c5abcb05SEvgenii Kudriashov; X64-NEXT: # kill: def $ax killed $ax killed $eax 123*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 124*c5abcb05SEvgenii Kudriashoventry: 125*c5abcb05SEvgenii Kudriashov br i1 %pred, label %cond.true, label %cond.false 126*c5abcb05SEvgenii Kudriashov 127*c5abcb05SEvgenii Kudriashovcond.true: ; preds = %entry 128*c5abcb05SEvgenii Kudriashov br label %cond.end 129*c5abcb05SEvgenii Kudriashov 130*c5abcb05SEvgenii Kudriashovcond.false: ; preds = %entry 131*c5abcb05SEvgenii Kudriashov br label %cond.end 132*c5abcb05SEvgenii Kudriashov 133*c5abcb05SEvgenii Kudriashovcond.end: ; preds = %cond.false, %cond.true 134*c5abcb05SEvgenii Kudriashov %cond = phi i16 [ %f, %cond.true ], [ %t, %cond.false ] 135*c5abcb05SEvgenii Kudriashov ret i16 %cond 136*c5abcb05SEvgenii Kudriashov} 137*c5abcb05SEvgenii Kudriashov 138*c5abcb05SEvgenii Kudriashovdefine i32 @test_i32(i32 %f, i32 %t, i1 %pred) { 139*c5abcb05SEvgenii Kudriashov; X86-LABEL: test_i32: 140*c5abcb05SEvgenii Kudriashov; X86: # %bb.0: # %entry 141*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 142*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB3_2 143*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.1: 144*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 145*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 146*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB3_2: # %cond.false 147*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 148*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 149*c5abcb05SEvgenii Kudriashov; 150*c5abcb05SEvgenii Kudriashov; X64-LABEL: test_i32: 151*c5abcb05SEvgenii Kudriashov; X64: # %bb.0: # %entry 152*c5abcb05SEvgenii Kudriashov; X64-NEXT: movl %edi, %eax 153*c5abcb05SEvgenii Kudriashov; X64-NEXT: testb $1, %dl 154*c5abcb05SEvgenii Kudriashov; X64-NEXT: jne .LBB3_2 155*c5abcb05SEvgenii Kudriashov; X64-NEXT: # %bb.1: # %cond.false 156*c5abcb05SEvgenii Kudriashov; X64-NEXT: movl %esi, %eax 157*c5abcb05SEvgenii Kudriashov; X64-NEXT: .LBB3_2: # %cond.end 158*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 159*c5abcb05SEvgenii Kudriashoventry: 160*c5abcb05SEvgenii Kudriashov br i1 %pred, label %cond.true, label %cond.false 161*c5abcb05SEvgenii Kudriashov 162*c5abcb05SEvgenii Kudriashovcond.true: ; preds = %entry 163*c5abcb05SEvgenii Kudriashov br label %cond.end 164*c5abcb05SEvgenii Kudriashov 165*c5abcb05SEvgenii Kudriashovcond.false: ; preds = %entry 166*c5abcb05SEvgenii Kudriashov br label %cond.end 167*c5abcb05SEvgenii Kudriashov 168*c5abcb05SEvgenii Kudriashovcond.end: ; preds = %cond.false, %cond.true 169*c5abcb05SEvgenii Kudriashov %cond = phi i32 [ %f, %cond.true ], [ %t, %cond.false ] 170*c5abcb05SEvgenii Kudriashov ret i32 %cond 171*c5abcb05SEvgenii Kudriashov} 172*c5abcb05SEvgenii Kudriashov 173*c5abcb05SEvgenii Kudriashovdefine i64 @test_i64(i64 %f, i64 %t, i1 %pred) { 174*c5abcb05SEvgenii Kudriashov; X86-LABEL: test_i64: 175*c5abcb05SEvgenii Kudriashov; X86: # %bb.0: # %entry 176*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 177*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB4_2 178*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.1: 179*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %edx 180*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 181*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 182*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB4_2: # %cond.false 183*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %edx 184*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 185*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 186*c5abcb05SEvgenii Kudriashov; 187*c5abcb05SEvgenii Kudriashov; X64-LABEL: test_i64: 188*c5abcb05SEvgenii Kudriashov; X64: # %bb.0: # %entry 189*c5abcb05SEvgenii Kudriashov; X64-NEXT: movq %rdi, %rax 190*c5abcb05SEvgenii Kudriashov; X64-NEXT: testb $1, %dl 191*c5abcb05SEvgenii Kudriashov; X64-NEXT: jne .LBB4_2 192*c5abcb05SEvgenii Kudriashov; X64-NEXT: # %bb.1: # %cond.false 193*c5abcb05SEvgenii Kudriashov; X64-NEXT: movq %rsi, %rax 194*c5abcb05SEvgenii Kudriashov; X64-NEXT: .LBB4_2: # %cond.end 195*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 196*c5abcb05SEvgenii Kudriashoventry: 197*c5abcb05SEvgenii Kudriashov br i1 %pred, label %cond.true, label %cond.false 198*c5abcb05SEvgenii Kudriashov 199*c5abcb05SEvgenii Kudriashovcond.true: ; preds = %entry 200*c5abcb05SEvgenii Kudriashov br label %cond.end 201*c5abcb05SEvgenii Kudriashov 202*c5abcb05SEvgenii Kudriashovcond.false: ; preds = %entry 203*c5abcb05SEvgenii Kudriashov br label %cond.end 204*c5abcb05SEvgenii Kudriashov 205*c5abcb05SEvgenii Kudriashovcond.end: ; preds = %cond.false, %cond.true 206*c5abcb05SEvgenii Kudriashov %cond = phi i64 [ %f, %cond.true ], [ %t, %cond.false ] 207*c5abcb05SEvgenii Kudriashov ret i64 %cond 208*c5abcb05SEvgenii Kudriashov} 209*c5abcb05SEvgenii Kudriashov 210*c5abcb05SEvgenii Kudriashovdefine float @test_float(float %f, float %t, i1 %pred) { 211*c5abcb05SEvgenii Kudriashov; X86-LABEL: test_float: 212*c5abcb05SEvgenii Kudriashov; X86: # %bb.0: # %entry 213*c5abcb05SEvgenii Kudriashov; X86-NEXT: flds {{[0-9]+}}(%esp) 214*c5abcb05SEvgenii Kudriashov; X86-NEXT: flds {{[0-9]+}}(%esp) 215*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 216*c5abcb05SEvgenii Kudriashov; X86-NEXT: jne .LBB5_2 217*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.1: # %cond.false 218*c5abcb05SEvgenii Kudriashov; X86-NEXT: fstp %st(0) 219*c5abcb05SEvgenii Kudriashov; X86-NEXT: fldz 220*c5abcb05SEvgenii Kudriashov; X86-NEXT: fxch %st(1) 221*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB5_2: # %cond.end 222*c5abcb05SEvgenii Kudriashov; X86-NEXT: fstp %st(1) 223*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 224*c5abcb05SEvgenii Kudriashov; 225*c5abcb05SEvgenii Kudriashov; X64-LABEL: test_float: 226*c5abcb05SEvgenii Kudriashov; X64: # %bb.0: # %entry 227*c5abcb05SEvgenii Kudriashov; X64-NEXT: testb $1, %dil 228*c5abcb05SEvgenii Kudriashov; X64-NEXT: jne .LBB5_2 229*c5abcb05SEvgenii Kudriashov; X64-NEXT: # %bb.1: # %cond.false 230*c5abcb05SEvgenii Kudriashov; X64-NEXT: movaps %xmm1, %xmm0 231*c5abcb05SEvgenii Kudriashov; X64-NEXT: .LBB5_2: # %cond.end 232*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 233*c5abcb05SEvgenii Kudriashoventry: 234*c5abcb05SEvgenii Kudriashov br i1 %pred, label %cond.true, label %cond.false 235*c5abcb05SEvgenii Kudriashov 236*c5abcb05SEvgenii Kudriashovcond.true: ; preds = %entry 237*c5abcb05SEvgenii Kudriashov br label %cond.end 238*c5abcb05SEvgenii Kudriashov 239*c5abcb05SEvgenii Kudriashovcond.false: ; preds = %entry 240*c5abcb05SEvgenii Kudriashov br label %cond.end 241*c5abcb05SEvgenii Kudriashov 242*c5abcb05SEvgenii Kudriashovcond.end: ; preds = %cond.false, %cond.true 243*c5abcb05SEvgenii Kudriashov %cond = phi float [ %f, %cond.true ], [ %t, %cond.false ] 244*c5abcb05SEvgenii Kudriashov ret float %cond 245*c5abcb05SEvgenii Kudriashov} 246*c5abcb05SEvgenii Kudriashov 247*c5abcb05SEvgenii Kudriashovdefine double @test_double(i32 %a, double %f, double %t, i1 %pred) { 248*c5abcb05SEvgenii Kudriashov; X86-LABEL: test_double: 249*c5abcb05SEvgenii Kudriashov; X86: # %bb.0: # %entry 250*c5abcb05SEvgenii Kudriashov; X86-NEXT: fldl {{[0-9]+}}(%esp) 251*c5abcb05SEvgenii Kudriashov; X86-NEXT: fldl {{[0-9]+}}(%esp) 252*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 253*c5abcb05SEvgenii Kudriashov; X86-NEXT: jne .LBB6_2 254*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.1: # %cond.false 255*c5abcb05SEvgenii Kudriashov; X86-NEXT: fstp %st(0) 256*c5abcb05SEvgenii Kudriashov; X86-NEXT: fldz 257*c5abcb05SEvgenii Kudriashov; X86-NEXT: fxch %st(1) 258*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB6_2: # %cond.end 259*c5abcb05SEvgenii Kudriashov; X86-NEXT: fstp %st(1) 260*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 261*c5abcb05SEvgenii Kudriashov; 262*c5abcb05SEvgenii Kudriashov; X64-LABEL: test_double: 263*c5abcb05SEvgenii Kudriashov; X64: # %bb.0: # %entry 264*c5abcb05SEvgenii Kudriashov; X64-NEXT: testb $1, %sil 265*c5abcb05SEvgenii Kudriashov; X64-NEXT: jne .LBB6_2 266*c5abcb05SEvgenii Kudriashov; X64-NEXT: # %bb.1: # %cond.false 267*c5abcb05SEvgenii Kudriashov; X64-NEXT: movaps %xmm1, %xmm0 268*c5abcb05SEvgenii Kudriashov; X64-NEXT: .LBB6_2: # %cond.end 269*c5abcb05SEvgenii Kudriashov; X64-NEXT: retq 270*c5abcb05SEvgenii Kudriashoventry: 271*c5abcb05SEvgenii Kudriashov br i1 %pred, label %cond.true, label %cond.false 272*c5abcb05SEvgenii Kudriashov 273*c5abcb05SEvgenii Kudriashovcond.true: ; preds = %entry 274*c5abcb05SEvgenii Kudriashov br label %cond.end 275*c5abcb05SEvgenii Kudriashov 276*c5abcb05SEvgenii Kudriashovcond.false: ; preds = %entry 277*c5abcb05SEvgenii Kudriashov br label %cond.end 278*c5abcb05SEvgenii Kudriashov 279*c5abcb05SEvgenii Kudriashovcond.end: ; preds = %cond.false, %cond.true 280*c5abcb05SEvgenii Kudriashov %cond = phi double [ %f, %cond.true ], [ %t, %cond.false ] 281*c5abcb05SEvgenii Kudriashov ret double %cond 282*c5abcb05SEvgenii Kudriashov} 283*c5abcb05SEvgenii Kudriashov 284*c5abcb05SEvgenii Kudriashovdefine ptr @test_ptr(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e, ptr %f, ptr %g, i1 %pred0, i1 %pred1, i1 %pred2) { 285*c5abcb05SEvgenii Kudriashov; X86-LABEL: test_ptr: 286*c5abcb05SEvgenii Kudriashov; X86: # %bb.0: # %entry 287*c5abcb05SEvgenii Kudriashov; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 288*c5abcb05SEvgenii Kudriashov; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx 289*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 290*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB7_6 291*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.1: # %cond.true 292*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, %cl 293*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB7_3 294*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.2: 295*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 296*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 297*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB7_6: # %cond.false 298*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, %cl 299*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB7_10 300*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.7: # %cond.false.true 301*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, %al 302*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB7_9 303*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.8: 304*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 305*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 306*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB7_3: # %cond.true.false 307*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, %al 308*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB7_5 309*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.4: 310*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 311*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 312*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB7_10: # %cond.false.false 313*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, %al 314*c5abcb05SEvgenii Kudriashov; X86-NEXT: je .LBB7_12 315*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.11: 316*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 317*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 318*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB7_9: # %cond.false.true.false 319*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 320*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 321*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB7_5: # %cond.true.false.false 322*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 323*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 324*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB7_12: # %cond.false.false.false 325*c5abcb05SEvgenii Kudriashov; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 326*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 327*c5abcb05SEvgenii Kudriashov; 328*c5abcb05SEvgenii Kudriashov; DAG-X64-LABEL: test_ptr: 329*c5abcb05SEvgenii Kudriashov; DAG-X64: # %bb.0: # %entry 330*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: movq %rdi, %rax 331*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: movzbl {{[0-9]+}}(%rsp), %edi 332*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: movzbl {{[0-9]+}}(%rsp), %r10d 333*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: testb $1, {{[0-9]+}}(%rsp) 334*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: je .LBB7_4 335*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: # %bb.1: # %cond.true 336*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: testb $1, %r10b 337*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: jne .LBB7_9 338*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: # %bb.2: # %cond.true.false 339*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: testb $1, %dil 340*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: movq %rsi, %rax 341*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: jne .LBB7_9 342*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: # %bb.3: # %cond.true.false.false 343*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: movq %rdx, %rax 344*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: retq 345*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: .LBB7_4: # %cond.false 346*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: testb $1, %r10b 347*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: je .LBB7_7 348*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: # %bb.5: # %cond.false.true 349*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: testb $1, %dil 350*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: movq %rcx, %rax 351*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: jne .LBB7_9 352*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: # %bb.6: # %cond.false.true.false 353*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: movq %r8, %rax 354*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: retq 355*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: .LBB7_7: # %cond.false.false 356*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: testb $1, %dil 357*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: movq %r9, %rax 358*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: jne .LBB7_9 359*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: # %bb.8: # %cond.false.false.false 360*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: movq {{[0-9]+}}(%rsp), %rax 361*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: .LBB7_9: # %cond.end 362*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: retq 363*c5abcb05SEvgenii Kudriashov; 364*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-LABEL: test_ptr: 365*c5abcb05SEvgenii Kudriashov; GLOBAL-X64: # %bb.0: # %entry 366*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movq %rdi, %rax 367*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movl {{[0-9]+}}(%rsp), %r11d 368*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movl {{[0-9]+}}(%rsp), %r10d 369*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movl {{[0-9]+}}(%rsp), %edi 370*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: testb $1, %r11b 371*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: je .LBB7_4 372*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: # %bb.1: # %cond.true 373*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: testb $1, %r10b 374*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: jne .LBB7_9 375*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: # %bb.2: # %cond.true.false 376*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: testb $1, %dil 377*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movq %rsi, %rax 378*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: jne .LBB7_9 379*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: # %bb.3: # %cond.true.false.false 380*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movq %rdx, %rax 381*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: retq 382*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: .LBB7_4: # %cond.false 383*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: testb $1, %r10b 384*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: je .LBB7_7 385*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: # %bb.5: # %cond.false.true 386*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: testb $1, %dil 387*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movq %rcx, %rax 388*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: jne .LBB7_9 389*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: # %bb.6: # %cond.false.true.false 390*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movq %r8, %rax 391*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: retq 392*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: .LBB7_7: # %cond.false.false 393*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: testb $1, %dil 394*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movq %r9, %rax 395*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: jne .LBB7_9 396*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: # %bb.8: # %cond.false.false.false 397*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: movq {{[0-9]+}}(%rsp), %rax 398*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: .LBB7_9: # %cond.end 399*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: retq 400*c5abcb05SEvgenii Kudriashoventry: 401*c5abcb05SEvgenii Kudriashov br i1 %pred0, label %cond.true, label %cond.false 402*c5abcb05SEvgenii Kudriashov 403*c5abcb05SEvgenii Kudriashovcond.true: 404*c5abcb05SEvgenii Kudriashov br i1 %pred1, label %cond.end, label %cond.true.false 405*c5abcb05SEvgenii Kudriashov 406*c5abcb05SEvgenii Kudriashovcond.true.false: 407*c5abcb05SEvgenii Kudriashov br i1 %pred2, label %cond.true.false.true, label %cond.true.false.false 408*c5abcb05SEvgenii Kudriashov 409*c5abcb05SEvgenii Kudriashovcond.true.false.true: 410*c5abcb05SEvgenii Kudriashov br label %cond.end 411*c5abcb05SEvgenii Kudriashov 412*c5abcb05SEvgenii Kudriashovcond.true.false.false: 413*c5abcb05SEvgenii Kudriashov br label %cond.end 414*c5abcb05SEvgenii Kudriashov 415*c5abcb05SEvgenii Kudriashovcond.false: 416*c5abcb05SEvgenii Kudriashov br i1 %pred1, label %cond.false.true, label %cond.false.false 417*c5abcb05SEvgenii Kudriashov 418*c5abcb05SEvgenii Kudriashovcond.false.true: 419*c5abcb05SEvgenii Kudriashov br i1 %pred2, label %cond.false.true.true, label %cond.false.true.false 420*c5abcb05SEvgenii Kudriashov 421*c5abcb05SEvgenii Kudriashovcond.false.true.true: 422*c5abcb05SEvgenii Kudriashov br label %cond.end 423*c5abcb05SEvgenii Kudriashov 424*c5abcb05SEvgenii Kudriashovcond.false.true.false: 425*c5abcb05SEvgenii Kudriashov br label %cond.end 426*c5abcb05SEvgenii Kudriashov 427*c5abcb05SEvgenii Kudriashovcond.false.false: 428*c5abcb05SEvgenii Kudriashov br i1 %pred2, label %cond.false.false.true, label %cond.false.false.false 429*c5abcb05SEvgenii Kudriashov 430*c5abcb05SEvgenii Kudriashovcond.false.false.true: 431*c5abcb05SEvgenii Kudriashov br label %cond.end 432*c5abcb05SEvgenii Kudriashov 433*c5abcb05SEvgenii Kudriashovcond.false.false.false: 434*c5abcb05SEvgenii Kudriashov br label %cond.end 435*c5abcb05SEvgenii Kudriashov 436*c5abcb05SEvgenii Kudriashovcond.end: 437*c5abcb05SEvgenii Kudriashov %res = phi ptr [ %a, %cond.true ], [ %b, %cond.true.false.true ], [ %c, %cond.true.false.false ], [ %d, %cond.false.true.true ], [ %e, %cond.false.true.false ], [ %f, %cond.false.false.true ], [ %g, %cond.false.false.false ] 438*c5abcb05SEvgenii Kudriashov ret ptr %res 439*c5abcb05SEvgenii Kudriashov} 440*c5abcb05SEvgenii Kudriashov 441*c5abcb05SEvgenii Kudriashovdefine x86_fp80 @test_fp80(x86_fp80 %f, x86_fp80 %t, i1 %pred) { 442*c5abcb05SEvgenii Kudriashov; X86-LABEL: test_fp80: 443*c5abcb05SEvgenii Kudriashov; X86: # %bb.0: # %entry 444*c5abcb05SEvgenii Kudriashov; X86-NEXT: fldt {{[0-9]+}}(%esp) 445*c5abcb05SEvgenii Kudriashov; X86-NEXT: fldt {{[0-9]+}}(%esp) 446*c5abcb05SEvgenii Kudriashov; X86-NEXT: testb $1, {{[0-9]+}}(%esp) 447*c5abcb05SEvgenii Kudriashov; X86-NEXT: jne .LBB8_2 448*c5abcb05SEvgenii Kudriashov; X86-NEXT: # %bb.1: # %cond.false 449*c5abcb05SEvgenii Kudriashov; X86-NEXT: fstp %st(0) 450*c5abcb05SEvgenii Kudriashov; X86-NEXT: fldz 451*c5abcb05SEvgenii Kudriashov; X86-NEXT: fxch %st(1) 452*c5abcb05SEvgenii Kudriashov; X86-NEXT: .LBB8_2: # %cond.end 453*c5abcb05SEvgenii Kudriashov; X86-NEXT: fstp %st(1) 454*c5abcb05SEvgenii Kudriashov; X86-NEXT: retl 455*c5abcb05SEvgenii Kudriashov; 456*c5abcb05SEvgenii Kudriashov; DAG-X64-LABEL: test_fp80: 457*c5abcb05SEvgenii Kudriashov; DAG-X64: # %bb.0: # %entry 458*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: fldt {{[0-9]+}}(%rsp) 459*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: fldt {{[0-9]+}}(%rsp) 460*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: testb $1, %dil 461*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: jne .LBB8_2 462*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: # %bb.1: # %cond.false 463*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: fstp %st(0) 464*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: fldz 465*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: fxch %st(1) 466*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: .LBB8_2: # %cond.end 467*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: fstp %st(1) 468*c5abcb05SEvgenii Kudriashov; DAG-X64-NEXT: retq 469*c5abcb05SEvgenii Kudriashov; 470*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-LABEL: test_fp80: 471*c5abcb05SEvgenii Kudriashov; GLOBAL-X64: # %bb.0: # %entry 472*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: fldt {{[0-9]+}}(%rsp) 473*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: fldt {{[0-9]+}}(%rsp) 474*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: testb $1, %dil 475*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: jne .LBB8_2 476*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: # %bb.1: # %cond.false 477*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: fstp %st(1) 478*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: fldz 479*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: .LBB8_2: # %cond.end 480*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: fstp %st(0) 481*c5abcb05SEvgenii Kudriashov; GLOBAL-X64-NEXT: retq 482*c5abcb05SEvgenii Kudriashoventry: 483*c5abcb05SEvgenii Kudriashov br i1 %pred, label %cond.true, label %cond.false 484*c5abcb05SEvgenii Kudriashov 485*c5abcb05SEvgenii Kudriashovcond.true: ; preds = %entry 486*c5abcb05SEvgenii Kudriashov br label %cond.end 487*c5abcb05SEvgenii Kudriashov 488*c5abcb05SEvgenii Kudriashovcond.false: ; preds = %entry 489*c5abcb05SEvgenii Kudriashov br label %cond.end 490*c5abcb05SEvgenii Kudriashov 491*c5abcb05SEvgenii Kudriashovcond.end: ; preds = %cond.false, %cond.true 492*c5abcb05SEvgenii Kudriashov %cond = phi x86_fp80 [ %f, %cond.true ], [ %t, %cond.false ] 493*c5abcb05SEvgenii Kudriashov ret x86_fp80 %cond 494*c5abcb05SEvgenii Kudriashov} 495