1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mattr=+vsx < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mattr=+vsx < %s | FileCheck -check-prefix=CHECK-REG %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mattr=+vsx -fast-isel -O0 < %s | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mattr=+vsx -fast-isel -O0 < %s | FileCheck -check-prefix=CHECK-FISL %s 5*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i64:64-n32:64" 6*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine double @foo1(double %a) nounwind { 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker call void asm sideeffect "", "~{f0},~{f1},~{f2},~{f3},~{f4},~{f5},~{f6},~{f7},~{f8},~{f9},~{f10},~{f11},~{f12},~{f13},~{f14},~{f15},~{f16},~{f17},~{f18},~{f19},~{f20},~{f21},~{f22},~{f23},~{f24},~{f25},~{f26},~{f27},~{f28},~{f29},~{f30},~{f31}"() nounwind 11*9880d681SAndroid Build Coastguard Worker br label %return 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; CHECK-REG: @foo1 14*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlor [[R1:[0-9]+]], 1, 1 15*9880d681SAndroid Build Coastguard Worker; CHECK-REG: xxlor 1, [[R1]], [[R1]] 16*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: @foo1 19*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lis 0, -1 20*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: ori 0, 0, 65384 21*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stxsdx 1, 1, 0 22*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerreturn: ; preds = %entry 25*9880d681SAndroid Build Coastguard Worker ret double %a 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine double @foo2(double %a) nounwind { 29*9880d681SAndroid Build Coastguard Workerentry: 30*9880d681SAndroid Build Coastguard Worker %b = fadd double %a, %a 31*9880d681SAndroid Build Coastguard Worker call void asm sideeffect "", "~{f0},~{f1},~{f2},~{f3},~{f4},~{f5},~{f6},~{f7},~{f8},~{f9},~{f10},~{f11},~{f12},~{f13},~{f14},~{f15},~{f16},~{f17},~{f18},~{f19},~{f20},~{f21},~{f22},~{f23},~{f24},~{f25},~{f26},~{f27},~{f28},~{f29},~{f30},~{f31}"() nounwind 32*9880d681SAndroid Build Coastguard Worker br label %return 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker; CHECK-REG: @foo2 35*9880d681SAndroid Build Coastguard Worker; CHECK-REG: {{xxlor|xsadddp}} [[R1:[0-9]+]], 1, 1 36*9880d681SAndroid Build Coastguard Worker; CHECK-REG: {{xxlor|xsadddp}} 1, [[R1]], [[R1]] 37*9880d681SAndroid Build Coastguard Worker; CHECK-REG: blr 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: @foo2 40*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: xsadddp [[R1:[0-9]+]], 1, 1 41*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: stxsdx [[R1]], [[R1]], 0 42*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: lxsdx [[R1]], [[R1]], 0 43*9880d681SAndroid Build Coastguard Worker; CHECK-FISL: blr 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerreturn: ; preds = %entry 46*9880d681SAndroid Build Coastguard Worker ret double %b 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdefine double @foo3(double %a) nounwind { 50*9880d681SAndroid Build Coastguard Workerentry: 51*9880d681SAndroid Build Coastguard Worker call void asm sideeffect "", "~{f0},~{f1},~{f2},~{f3},~{f4},~{f5},~{f6},~{f7},~{f8},~{f9},~{f10},~{f11},~{f12},~{f13},~{f14},~{f15},~{f16},~{f17},~{f18},~{f19},~{f20},~{f21},~{f22},~{f23},~{f24},~{f25},~{f26},~{f27},~{f28},~{f29},~{f30},~{f31},~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7},~{v8},~{v9},~{v10},~{v11},~{v12},~{v13},~{v14},~{v15},~{v16},~{v17},~{v18},~{v19},~{v20},~{v21},~{v22},~{v23},~{v24},~{v25},~{v26},~{v27},~{v28},~{v29},~{v30},~{v31}"() nounwind 52*9880d681SAndroid Build Coastguard Worker br label %return 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker; CHECK: @foo3 55*9880d681SAndroid Build Coastguard Worker; CHECK: stxsdx 1, 56*9880d681SAndroid Build Coastguard Worker; CHECK: lxsdx [[R1:[0-9]+]], 57*9880d681SAndroid Build Coastguard Worker; CHECK: xsadddp 1, [[R1]], [[R1]] 58*9880d681SAndroid Build Coastguard Worker; CHECK: blr 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerreturn: ; preds = %entry 61*9880d681SAndroid Build Coastguard Worker %b = fadd double %a, %a 62*9880d681SAndroid Build Coastguard Worker ret double %b 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65