Simon Atanasyan | 3785e84 | 2018-08-31 15:57:17 +0000 | [diff] [blame] | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
Stefan Maksimovic | cd0c50e | 2018-11-01 10:10:42 +0000 | [diff] [blame] | 2 | ; RUN: llc -mtriple=mips -mcpu=mips32r2 -mattr=+micromips -verify-machineinstrs \ |
Simon Atanasyan | 3785e84 | 2018-08-31 15:57:17 +0000 | [diff] [blame] | 3 | ; RUN: -show-mc-encoding < %s | FileCheck --check-prefix=MM2 %s |
Stefan Maksimovic | cd0c50e | 2018-11-01 10:10:42 +0000 | [diff] [blame] | 4 | ; RUN: llc -mtriple=mips -mcpu=mips32r6 -mattr=+micromips -verify-machineinstrs \ |
Simon Atanasyan | 3785e84 | 2018-08-31 15:57:17 +0000 | [diff] [blame] | 5 | ; RUN: -show-mc-encoding < %s | FileCheck --check-prefix=MM6 %s |
| 6 | |
| 7 | define double @foo(double %a, double %b) { |
| 8 | ; MM2-LABEL: foo: |
| 9 | ; MM2: # %bb.0: # %entry |
| 10 | ; MM2-NEXT: mov.d $f0, $f12 # encoding: [0x54,0x0c,0x20,0x7b] |
| 11 | ; MM2-NEXT: mtc1 $zero, $f2 # encoding: [0x54,0x02,0x28,0x3b] |
| 12 | ; MM2-NEXT: mthc1 $zero, $f2 # encoding: [0x54,0x02,0x38,0x3b] |
| 13 | ; MM2-NEXT: c.ule.d $f12, $f2 # encoding: [0x54,0x4c,0x05,0xfc] |
| 14 | ; MM2-NEXT: bc1t $BB0_2 # encoding: [0x43,0xa0,A,A] |
| 15 | ; MM2-NEXT: # fixup A - offset: 0, value: ($BB0_2), kind: fixup_MICROMIPS_PC16_S1 |
| 16 | ; MM2-NEXT: nop # encoding: [0x00,0x00,0x00,0x00] |
| 17 | ; MM2-NEXT: # %bb.1: # %entry |
| 18 | ; MM2-NEXT: j $BB0_2 # encoding: [0b110101AA,A,A,A] |
| 19 | ; MM2-NEXT: # fixup A - offset: 0, value: ($BB0_2), kind: fixup_MICROMIPS_26_S1 |
| 20 | ; MM2-NEXT: nop # encoding: [0x00,0x00,0x00,0x00] |
| 21 | ; MM2-NEXT: $BB0_2: # %return |
| 22 | ; MM2-NEXT: jrc $ra # encoding: [0x45,0xbf] |
| 23 | ; |
| 24 | ; MM6-LABEL: foo: |
| 25 | ; MM6: # %bb.0: # %entry |
| 26 | ; MM6-NEXT: mov.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x06] |
| 27 | ; MM6-NEXT: mtc1 $zero, $f1 # encoding: [0x54,0x01,0x28,0x3b] |
| 28 | ; MM6-NEXT: mthc1 $zero, $f1 # encoding: [0x54,0x01,0x38,0x3b] |
| 29 | ; MM6-NEXT: cmp.ule.d $f1, $f12, $f1 # encoding: [0x54,0x2c,0x09,0xd5] |
| 30 | ; MM6-NEXT: mfc1 $2, $f1 # encoding: [0x54,0x41,0x20,0x3b] |
| 31 | ; MM6-NEXT: andi16 $2, $2, 1 # encoding: [0x2d,0x21] |
| 32 | ; MM6-NEXT: jrc $ra # encoding: [0x45,0xbf] |
| 33 | entry: |
| 34 | %cmp = fcmp ogt double %a, 0.000000e+00 |
| 35 | br i1 %cmp, label %if.end, label %if.else |
| 36 | |
| 37 | if.else: |
| 38 | br label %return |
| 39 | |
| 40 | if.end: |
| 41 | %mul = fmul double %a, 2.000000e+00 |
| 42 | br label %return |
| 43 | |
| 44 | return: |
| 45 | ret double %a |
| 46 | } |
| 47 | |
| 48 | define double @bar(double %x, double %y) { |
| 49 | ; MM2-LABEL: bar: |
| 50 | ; MM2: # %bb.0: # %entry |
| 51 | ; MM2-NEXT: mov.d $f0, $f14 # encoding: [0x54,0x0e,0x20,0x7b] |
| 52 | ; MM2-NEXT: c.olt.d $f12, $f14 # encoding: [0x55,0xcc,0x05,0x3c] |
| 53 | ; MM2-NEXT: jr $ra # encoding: [0x00,0x1f,0x0f,0x3c] |
| 54 | ; MM2-NEXT: movt.d $f0, $f12, $fcc0 # encoding: [0x54,0x0c,0x02,0x60] |
| 55 | ; |
| 56 | ; MM6-LABEL: bar: |
| 57 | ; MM6: # %bb.0: # %entry |
| 58 | ; MM6-NEXT: cmp.lt.d $f0, $f12, $f14 # encoding: [0x55,0xcc,0x01,0x15] |
| 59 | ; MM6-NEXT: mfc1 $1, $f0 # encoding: [0x54,0x20,0x20,0x3b] |
Simon Atanasyan | 4d13cb0 | 2018-09-03 20:48:55 +0000 | [diff] [blame] | 60 | ; MM6-NEXT: mtc1 $1, $f0 # encoding: [0x54,0x20,0x28,0x3b] |
Simon Atanasyan | 3785e84 | 2018-08-31 15:57:17 +0000 | [diff] [blame] | 61 | ; MM6-NEXT: sel.d $f0, $f14, $f12 # encoding: [0x55,0x8e,0x02,0xb8] |
| 62 | ; MM6-NEXT: jrc $ra # encoding: [0x45,0xbf] |
Simon Atanasyan | 3785e84 | 2018-08-31 15:57:17 +0000 | [diff] [blame] | 63 | entry: |
| 64 | %z = fcmp olt double %x, %y |
| 65 | %r = select i1 %z, double %x, double %y |
| 66 | ret double %r |
| 67 | } |