Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| 2 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+bmi,+bmi2 | FileCheck %s |
| 3 | |
| 4 | define i32 @bzhi32(i32 %x, i32 %y) { |
| 5 | ; CHECK-LABEL: bzhi32: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 6 | ; CHECK: # %bb.0: |
Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 7 | ; CHECK-NEXT: bzhil %esi, %edi, %eax |
| 8 | ; CHECK-NEXT: retq |
| 9 | %tmp = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %x, i32 %y) |
| 10 | ret i32 %tmp |
| 11 | } |
| 12 | |
| 13 | define i32 @bzhi32_load(i32* %x, i32 %y) { |
| 14 | ; CHECK-LABEL: bzhi32_load: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 15 | ; CHECK: # %bb.0: |
Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 16 | ; CHECK-NEXT: bzhil %esi, (%rdi), %eax |
| 17 | ; CHECK-NEXT: retq |
| 18 | %x1 = load i32, i32* %x |
| 19 | %tmp = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %x1, i32 %y) |
| 20 | ret i32 %tmp |
| 21 | } |
| 22 | |
| 23 | declare i32 @llvm.x86.bmi.bzhi.32(i32, i32) |
| 24 | |
| 25 | define i64 @bzhi64(i64 %x, i64 %y) { |
| 26 | ; CHECK-LABEL: bzhi64: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 27 | ; CHECK: # %bb.0: |
Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 28 | ; CHECK-NEXT: bzhiq %rsi, %rdi, %rax |
| 29 | ; CHECK-NEXT: retq |
| 30 | %tmp = tail call i64 @llvm.x86.bmi.bzhi.64(i64 %x, i64 %y) |
| 31 | ret i64 %tmp |
| 32 | } |
| 33 | |
| 34 | declare i64 @llvm.x86.bmi.bzhi.64(i64, i64) |
| 35 | |
| 36 | define i32 @pdep32(i32 %x, i32 %y) { |
| 37 | ; CHECK-LABEL: pdep32: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 38 | ; CHECK: # %bb.0: |
Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 39 | ; CHECK-NEXT: pdepl %esi, %edi, %eax |
| 40 | ; CHECK-NEXT: retq |
| 41 | %tmp = tail call i32 @llvm.x86.bmi.pdep.32(i32 %x, i32 %y) |
| 42 | ret i32 %tmp |
| 43 | } |
| 44 | |
| 45 | define i32 @pdep32_load(i32 %x, i32* %y) { |
| 46 | ; CHECK-LABEL: pdep32_load: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 47 | ; CHECK: # %bb.0: |
Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 48 | ; CHECK-NEXT: pdepl (%rsi), %edi, %eax |
| 49 | ; CHECK-NEXT: retq |
| 50 | %y1 = load i32, i32* %y |
| 51 | %tmp = tail call i32 @llvm.x86.bmi.pdep.32(i32 %x, i32 %y1) |
| 52 | ret i32 %tmp |
| 53 | } |
| 54 | |
| 55 | declare i32 @llvm.x86.bmi.pdep.32(i32, i32) |
| 56 | |
| 57 | define i64 @pdep64(i64 %x, i64 %y) { |
| 58 | ; CHECK-LABEL: pdep64: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 59 | ; CHECK: # %bb.0: |
Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 60 | ; CHECK-NEXT: pdepq %rsi, %rdi, %rax |
| 61 | ; CHECK-NEXT: retq |
| 62 | %tmp = tail call i64 @llvm.x86.bmi.pdep.64(i64 %x, i64 %y) |
| 63 | ret i64 %tmp |
| 64 | } |
| 65 | |
| 66 | declare i64 @llvm.x86.bmi.pdep.64(i64, i64) |
| 67 | |
| 68 | define i32 @pext32(i32 %x, i32 %y) { |
| 69 | ; CHECK-LABEL: pext32: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 70 | ; CHECK: # %bb.0: |
Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 71 | ; CHECK-NEXT: pextl %esi, %edi, %eax |
| 72 | ; CHECK-NEXT: retq |
| 73 | %tmp = tail call i32 @llvm.x86.bmi.pext.32(i32 %x, i32 %y) |
| 74 | ret i32 %tmp |
| 75 | } |
| 76 | |
| 77 | define i32 @pext32_load(i32 %x, i32* %y) { |
| 78 | ; CHECK-LABEL: pext32_load: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 79 | ; CHECK: # %bb.0: |
Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 80 | ; CHECK-NEXT: pextl (%rsi), %edi, %eax |
| 81 | ; CHECK-NEXT: retq |
| 82 | %y1 = load i32, i32* %y |
| 83 | %tmp = tail call i32 @llvm.x86.bmi.pext.32(i32 %x, i32 %y1) |
| 84 | ret i32 %tmp |
| 85 | } |
| 86 | |
| 87 | declare i32 @llvm.x86.bmi.pext.32(i32, i32) |
| 88 | |
| 89 | define i64 @pext64(i64 %x, i64 %y) { |
| 90 | ; CHECK-LABEL: pext64: |
Francis Visoiu Mistrih | 25528d6 | 2017-12-04 17:18:51 +0000 | [diff] [blame] | 91 | ; CHECK: # %bb.0: |
Craig Topper | e2cc589 | 2017-08-01 16:45:11 +0000 | [diff] [blame] | 92 | ; CHECK-NEXT: pextq %rsi, %rdi, %rax |
| 93 | ; CHECK-NEXT: retq |
| 94 | %tmp = tail call i64 @llvm.x86.bmi.pext.64(i64 %x, i64 %y) |
| 95 | ret i64 %tmp |
| 96 | } |
| 97 | |
| 98 | declare i64 @llvm.x86.bmi.pext.64(i64, i64) |
| 99 | |