| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 
 | ;; Test to ensure that we are not using any of the aliased reserved registers
;; under the Extended Altivec ABI on AIX.
; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mattr=+altivec \
; RUN:     -stop-after=machine-cp -mtriple powerpc64-ibm-aix-xcoff < %s | \
; RUN:   FileCheck %s --check-prefix=DFLABI
; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mattr=+altivec -vec-extabi\
; RUN:     -stop-after=machine-cp -mtriple powerpc64-ibm-aix-xcoff < %s | \
; RUN:   FileCheck %s --check-prefix=EXTABI
define double @dbl_test(double %a, ptr %b) local_unnamed_addr {
entry:
  %0 = load volatile double, ptr %b, align 4
  %add = fadd double %0, %a
  store volatile double %add, ptr %b, align 4
  ;; Clobbered all vector and floating point registers. In the default Altivec
  ;; ABI this forces a register spill since no registers are free to use.
  tail call void asm sideeffect "nop", "~{v19},~{v18},~{v17},~{v16},~{v15},~{v14},~{v13},~{v12},~{v11},~{v10},~{v9},~{v8},~{v7},~{v6},~{v5},~{v4},~{v3},~{v2},~{v1},~{v0},~{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}"()
  %mul = fmul double %a, %a
  %1 = load volatile double, ptr %b, align 4
  %add1 = fadd double %mul, %1
  store volatile double %add1, ptr %b, align 4
  %2 = load volatile double, ptr %b, align 4
  ret double %2
}
define <4 x i32> @vec_test(<4 x i32> %a,  ptr %b) local_unnamed_addr {
entry:
  %0 = load volatile <4 x i32>, ptr %b, align 4
  %add = add <4 x i32> %0, %a
  store volatile <4 x i32> %add, ptr %b, align 4
  tail call void asm sideeffect "nop", "~{v19},~{v18},~{v17},~{v16},~{v15},~{v14},~{v13},~{v12},~{v11},~{v10},~{v9},~{v8},~{v7},~{v6},~{v5},~{v4},~{v3},~{v2},~{v1},~{v0},~{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}"()
  %mul = mul <4 x i32> %a, %a
  %1 = load volatile <4 x i32>, ptr %b, align 4
  %add1 = add <4 x i32> %mul, %1
  store volatile <4 x i32> %add1, ptr %b, align 4
  %2 = load volatile <4 x i32>, ptr %b, align 4
  ret <4 x i32> %2
}
; DFLABI-LABEL:   dbl_test
; DFLABI-NOT:     $v20
; DFLABI-NOT:     $v21
; DFLABI-NOT:     $v22
; DFLABI-NOT:     $v23
; DFLABI-NOT:     $v24
; DFLABI-NOT:     $v25
; DFLABI-NOT:     $v26
; DFLABI-NOT:     $v27
; DFLABI-NOT:     $v28
; DFLABI-NOT:     $v29
; DFLABI-NOT:     $v30
; DFLABI-NOT:     $v31
; DFLABI-NOT:     $vf20
; DFLABI-NOT:     $vf21
; DFLABI-NOT:     $vf22
; DFLABI-NOT:     $vf23
; DFLABI-NOT:     $vf24
; DFLABI-NOT:     $vf25
; DFLABI-NOT:     $vf26
; DFLABI-NOT:     $vf27
; DFLABI-NOT:     $vf28
; DFLABI-NOT:     $vf29
; DFLABI-NOT:     $vf30
; DFLABI-NOT:     $vf31
; DFLABI-NOT:     $vs20
; DFLABI-NOT:     $vs21
; DFLABI-NOT:     $vs22
; DFLABI-NOT:     $vs23
; DFLABI-NOT:     $vs24
; DFLABI-NOT:     $vs25
; DFLABI-NOT:     $vs26
; DFLABI-NOT:     $vs27
; DFLABI-NOT:     $vs28
; DFLABI-NOT:     $vs29
; DFLABI-NOT:     $vs30
; DFLABI-NOT:     $vs31
; EXTABI-LABEL:   vec_test
; EXTABI:         liveins:
; EXTABI-NEXT:     - { reg: '$f1', virtual-reg: '' }
; EXTABI-NEXT:     - { reg: '$x4', virtual-reg: '' }
; EXTABI:         body:             |
; EXTABI:         bb.0.entry:
; EXTABI:         liveins: $f1, $x4
; EXTABI-DAG:     renamable $f0 = LFD 0, renamable $x4 :: (volatile load (s64) from %ir.b, align 4)
; EXTABI-DAG:     renamable $f0 = nofpexcept XSADDDP killed renamable $f0, $f1, implicit $rm
; EXTABI:         STFD killed renamable $f0, 0, renamable $x4 :: (volatile store (s64) into %ir.b, align 4)
; EXTABI-LABEL:   INLINEASM
; EXTABI-DAG:     renamable $f0 = nofpexcept XSMULDP killed renamable $vf31, renamable $vf31, implicit $rm
; EXTABI-DAG:     renamable $f1 = LFD 0, renamable $x4 :: (volatile load (s64) from %ir.b, align 4)
; EXTABI-DAG:     renamable $f0 = nofpexcept XSADDDP killed renamable $f0, killed renamable $f1, implicit $rm
; EXTABI-DAG:     STFD killed renamable $f0, 0, renamable $x4 :: (volatile store (s64) into %ir.b, align 4)
; EXTABI:         renamable $f1 = LFD 0, killed renamable $x4 :: (volatile load (s64) from %ir.b, align 4)
; DFLABI-LABEL:   vec_test
; DFLABI-NOT:     $v20
; DFLABI-NOT:     $v21
; DFLABI-NOT:     $v22
; DFLABI-NOT:     $v23
; DFLABI-NOT:     $v24
; DFLABI-NOT:     $v25
; DFLABI-NOT:     $v26
; DFLABI-NOT:     $v27
; DFLABI-NOT:     $v28
; DFLABI-NOT:     $v29
; DFLABI-NOT:     $v30
; DFLABI-NOT:     $v31
; DFLABI-NOT:     $vf20
; DFLABI-NOT:     $vf21
; DFLABI-NOT:     $vf22
; DFLABI-NOT:     $vf23
; DFLABI-NOT:     $vf24
; DFLABI-NOT:     $vf25
; DFLABI-NOT:     $vf26
; DFLABI-NOT:     $vf27
; DFLABI-NOT:     $vf28
; DFLABI-NOT:     $vf29
; DFLABI-NOT:     $vf30
; DFLABI-NOT:     $vf31
; DFLABI-NOT:     $vs20
; DFLABI-NOT:     $vs21
; DFLABI-NOT:     $vs22
; DFLABI-NOT:     $vs23
; DFLABI-NOT:     $vs24
; DFLABI-NOT:     $vs25
; DFLABI-NOT:     $vs26
; DFLABI-NOT:     $vs27
; DFLABI-NOT:     $vs28
; DFLABI-NOT:     $vs29
; DFLABI-NOT:     $vs30
; DFLABI-NOT:     $vs31
; EXTABI-LABEL:   vec_test
; EXTABI:         liveins:
; EXTABI-NEXT:     - { reg: '$v2', virtual-reg: '' }
; EXTABI-NEXT:     - { reg: '$x3', virtual-reg: '' }
; EXTABI:         body:             |
; EXTABI-DAG:     bb.0.entry:
; EXTABI-DAG:     liveins: $v2, $x3
; EXTABI-DAG:     renamable $v31 = COPY $v2
; EXTABI-DAG:     renamable $v2 = LXVW4X $zero8, renamable $x3 :: (volatile load (s128) from %ir.b, align 4)
; EXTABI-DAG:     renamable $v2 = VADDUWM killed renamable $v2, renamable $v31
; EXTABI-LABEL:   INLINEASM
; EXTABI-DAG:     renamable $v2 = VMULUWM killed renamable $v31, renamable $v31
; EXTABI-DAG:     renamable $v3 = LXVW4X $zero8, renamable $x3 :: (volatile load (s128) from %ir.b, align 4)
; EXTABI-DAG:     renamable $v2 = VADDUWM killed renamable $v2, killed renamable $v3
; EXTABI-DAG:     STXVW4X killed renamable $v2, $zero8, renamable $x3 :: (volatile store (s128) into %ir.b, align 4)
; EXTABI:         renamable $v2 = LXVW4X $zero8, killed renamable $x3 :: (volatile load (s128) from %ir.b, align 4)
 |