1*9880d681SAndroid Build Coastguard Worker# RUN: llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o - %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker# This test ensures that the MIR parser parses constant pool constants and 3*9880d681SAndroid Build Coastguard Worker# constant pool operands correctly. 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker--- | 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker define double @test(double %a, float %b) { 8*9880d681SAndroid Build Coastguard Worker entry: 9*9880d681SAndroid Build Coastguard Worker %c = fadd double %a, 3.250000e+00 10*9880d681SAndroid Build Coastguard Worker %d = fadd float %b, 6.250000e+00 11*9880d681SAndroid Build Coastguard Worker %e = fpext float %d to double 12*9880d681SAndroid Build Coastguard Worker %f = fmul double %c, %e 13*9880d681SAndroid Build Coastguard Worker ret double %f 14*9880d681SAndroid Build Coastguard Worker } 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker define double @test2(double %a, float %b) { 17*9880d681SAndroid Build Coastguard Worker entry: 18*9880d681SAndroid Build Coastguard Worker %c = fadd double %a, 3.250000e+00 19*9880d681SAndroid Build Coastguard Worker %d = fadd float %b, 6.250000e+00 20*9880d681SAndroid Build Coastguard Worker %e = fpext float %d to double 21*9880d681SAndroid Build Coastguard Worker %f = fmul double %c, %e 22*9880d681SAndroid Build Coastguard Worker ret double %f 23*9880d681SAndroid Build Coastguard Worker } 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker define double @test3(double %a, float %b) { 26*9880d681SAndroid Build Coastguard Worker entry: 27*9880d681SAndroid Build Coastguard Worker %c = fadd double %a, 3.250000e+00 28*9880d681SAndroid Build Coastguard Worker %d = fadd float %b, 6.250000e+00 29*9880d681SAndroid Build Coastguard Worker %e = fpext float %d to double 30*9880d681SAndroid Build Coastguard Worker %f = fmul double %c, %e 31*9880d681SAndroid Build Coastguard Worker ret double %f 32*9880d681SAndroid Build Coastguard Worker } 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker define double @test4(double %a, float %b) { 35*9880d681SAndroid Build Coastguard Worker entry: 36*9880d681SAndroid Build Coastguard Worker %c = fadd double %a, 3.250000e+00 37*9880d681SAndroid Build Coastguard Worker %d = fadd float %b, 6.250000e+00 38*9880d681SAndroid Build Coastguard Worker %e = fpext float %d to double 39*9880d681SAndroid Build Coastguard Worker %f = fmul double %c, %e 40*9880d681SAndroid Build Coastguard Worker ret double %f 41*9880d681SAndroid Build Coastguard Worker } 42*9880d681SAndroid Build Coastguard Worker... 43*9880d681SAndroid Build Coastguard Worker--- 44*9880d681SAndroid Build Coastguard Worker# CHECK: name: test 45*9880d681SAndroid Build Coastguard Worker# CHECK: constants: 46*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: - id: 0 47*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: value: 'double 3.250000e+00' 48*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: alignment: 8 49*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: - id: 1 50*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: value: 'float 6.250000e+00' 51*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: alignment: 4 52*9880d681SAndroid Build Coastguard Workername: test 53*9880d681SAndroid Build Coastguard Workerconstants: 54*9880d681SAndroid Build Coastguard Worker - id: 0 55*9880d681SAndroid Build Coastguard Worker value: 'double 3.250000e+00' 56*9880d681SAndroid Build Coastguard Worker alignment: 8 57*9880d681SAndroid Build Coastguard Worker - id: 1 58*9880d681SAndroid Build Coastguard Worker value: 'float 6.250000e+00' 59*9880d681SAndroid Build Coastguard Worker alignment: 4 60*9880d681SAndroid Build Coastguard Workerbody: | 61*9880d681SAndroid Build Coastguard Worker bb.0.entry: 62*9880d681SAndroid Build Coastguard Worker ; CHECK: %xmm0 = ADDSDrm killed %xmm0, %rip, 1, _, %const.0, _ 63*9880d681SAndroid Build Coastguard Worker ; CHECK-NEXT: %xmm1 = ADDSSrm killed %xmm1, %rip, 1, _, %const.1, _ 64*9880d681SAndroid Build Coastguard Worker %xmm0 = ADDSDrm killed %xmm0, %rip, 1, _, %const.0, _ 65*9880d681SAndroid Build Coastguard Worker %xmm1 = ADDSSrm killed %xmm1, %rip, 1, _, %const.1, _ 66*9880d681SAndroid Build Coastguard Worker %xmm1 = CVTSS2SDrr killed %xmm1 67*9880d681SAndroid Build Coastguard Worker %xmm0 = MULSDrr killed %xmm0, killed %xmm1 68*9880d681SAndroid Build Coastguard Worker RETQ %xmm0 69*9880d681SAndroid Build Coastguard Worker... 70*9880d681SAndroid Build Coastguard Worker--- 71*9880d681SAndroid Build Coastguard Worker# Verify that alignment can be inferred: 72*9880d681SAndroid Build Coastguard Worker# CHECK: name: test2 73*9880d681SAndroid Build Coastguard Worker# CHECK: constants: 74*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: - id: 0 75*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: value: 'double 3.250000e+00' 76*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: alignment: 8 77*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: - id: 1 78*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: value: 'float 6.250000e+00' 79*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: alignment: 4 80*9880d681SAndroid Build Coastguard Workername: test2 81*9880d681SAndroid Build Coastguard Workerconstants: 82*9880d681SAndroid Build Coastguard Worker - id: 0 83*9880d681SAndroid Build Coastguard Worker value: 'double 3.250000e+00' 84*9880d681SAndroid Build Coastguard Worker - id: 1 85*9880d681SAndroid Build Coastguard Worker value: 'float 6.250000e+00' 86*9880d681SAndroid Build Coastguard Workerbody: | 87*9880d681SAndroid Build Coastguard Worker bb.0.entry: 88*9880d681SAndroid Build Coastguard Worker %xmm0 = ADDSDrm killed %xmm0, %rip, 1, _, %const.0, _ 89*9880d681SAndroid Build Coastguard Worker %xmm1 = ADDSSrm killed %xmm1, %rip, 1, _, %const.1, _ 90*9880d681SAndroid Build Coastguard Worker %xmm1 = CVTSS2SDrr killed %xmm1 91*9880d681SAndroid Build Coastguard Worker %xmm0 = MULSDrr killed %xmm0, killed %xmm1 92*9880d681SAndroid Build Coastguard Worker RETQ %xmm0 93*9880d681SAndroid Build Coastguard Worker... 94*9880d681SAndroid Build Coastguard Worker--- 95*9880d681SAndroid Build Coastguard Worker# Verify that the non-standard alignments are respected: 96*9880d681SAndroid Build Coastguard Worker# CHECK: name: test3 97*9880d681SAndroid Build Coastguard Worker# CHECK: constants: 98*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: - id: 0 99*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: value: 'double 3.250000e+00' 100*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: alignment: 128 101*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: - id: 1 102*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: value: 'float 6.250000e+00' 103*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: alignment: 1 104*9880d681SAndroid Build Coastguard Workername: test3 105*9880d681SAndroid Build Coastguard Workerconstants: 106*9880d681SAndroid Build Coastguard Worker - id: 0 107*9880d681SAndroid Build Coastguard Worker value: 'double 3.250000e+00' 108*9880d681SAndroid Build Coastguard Worker alignment: 128 109*9880d681SAndroid Build Coastguard Worker - id: 1 110*9880d681SAndroid Build Coastguard Worker value: 'float 6.250000e+00' 111*9880d681SAndroid Build Coastguard Worker alignment: 1 112*9880d681SAndroid Build Coastguard Workerbody: | 113*9880d681SAndroid Build Coastguard Worker bb.0.entry: 114*9880d681SAndroid Build Coastguard Worker ; CHECK: %xmm0 = ADDSDrm killed %xmm0, %rip, 1, _, %const.0, _ 115*9880d681SAndroid Build Coastguard Worker ; CHECK-NEXT: %xmm1 = ADDSSrm killed %xmm1, %rip, 1, _, %const.1, _ 116*9880d681SAndroid Build Coastguard Worker %xmm0 = ADDSDrm killed %xmm0, %rip, 1, _, %const.0, _ 117*9880d681SAndroid Build Coastguard Worker %xmm1 = ADDSSrm killed %xmm1, %rip, 1, _, %const.1, _ 118*9880d681SAndroid Build Coastguard Worker %xmm1 = CVTSS2SDrr killed %xmm1 119*9880d681SAndroid Build Coastguard Worker %xmm0 = MULSDrr killed %xmm0, killed %xmm1 120*9880d681SAndroid Build Coastguard Worker RETQ %xmm0 121*9880d681SAndroid Build Coastguard Worker... 122*9880d681SAndroid Build Coastguard Worker--- 123*9880d681SAndroid Build Coastguard Worker# CHECK: name: test4 124*9880d681SAndroid Build Coastguard Workername: test4 125*9880d681SAndroid Build Coastguard Workerconstants: 126*9880d681SAndroid Build Coastguard Worker - id: 0 127*9880d681SAndroid Build Coastguard Worker value: 'double 3.250000e+00' 128*9880d681SAndroid Build Coastguard Worker - id: 1 129*9880d681SAndroid Build Coastguard Worker value: 'float 6.250000e+00' 130*9880d681SAndroid Build Coastguard Workerbody: | 131*9880d681SAndroid Build Coastguard Worker bb.0.entry: 132*9880d681SAndroid Build Coastguard Worker ; CHECK: %xmm0 = ADDSDrm killed %xmm0, %rip, 1, _, %const.1 - 12, _ 133*9880d681SAndroid Build Coastguard Worker ; CHECK-NEXT: %xmm1 = ADDSSrm killed %xmm1, %rip, 1, _, %const.0 + 8, _ 134*9880d681SAndroid Build Coastguard Worker %xmm0 = ADDSDrm killed %xmm0, %rip, 1, _, %const.1 - 12, _ 135*9880d681SAndroid Build Coastguard Worker %xmm1 = ADDSSrm killed %xmm1, %rip, 1, _, %const.0 + 8, _ 136*9880d681SAndroid Build Coastguard Worker %xmm1 = CVTSS2SDrr killed %xmm1 137*9880d681SAndroid Build Coastguard Worker %xmm0 = MULSDrr killed %xmm0, killed %xmm1 138*9880d681SAndroid Build Coastguard Worker RETQ %xmm0 139*9880d681SAndroid Build Coastguard Worker... 140