1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+adx | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC 3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL 4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE --check-prefix=SKL 5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE --check-prefix=SKX 6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=knl | FileCheck %s --check-prefix=CHECK --check-prefix=KNL 7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 8 9 define void @test_adcx(i32 %a0, i32* %a1, i64 %a2, i64* %a3) optsize { 10 ; GENERIC-LABEL: test_adcx: 11 ; GENERIC: # %bb.0: 12 ; GENERIC-NEXT: #APP 13 ; GENERIC-NEXT: adcxl %edi, %edi # sched: [2:0.67] 14 ; GENERIC-NEXT: adcxq %rdx, %rdx # sched: [2:0.67] 15 ; GENERIC-NEXT: adcxl (%rsi), %edi # sched: [7:0.67] 16 ; GENERIC-NEXT: adcxq (%rcx), %rdx # sched: [7:0.67] 17 ; GENERIC-NEXT: #NO_APP 18 ; GENERIC-NEXT: retq # sched: [1:1.00] 19 ; 20 ; BROADWELL-LABEL: test_adcx: 21 ; BROADWELL: # %bb.0: 22 ; BROADWELL-NEXT: #APP 23 ; BROADWELL-NEXT: adcxl %edi, %edi # sched: [1:0.50] 24 ; BROADWELL-NEXT: adcxq %rdx, %rdx # sched: [1:0.50] 25 ; BROADWELL-NEXT: adcxl (%rsi), %edi # sched: [6:0.50] 26 ; BROADWELL-NEXT: adcxq (%rcx), %rdx # sched: [6:0.50] 27 ; BROADWELL-NEXT: #NO_APP 28 ; BROADWELL-NEXT: retq # sched: [7:1.00] 29 ; 30 ; SKYLAKE-LABEL: test_adcx: 31 ; SKYLAKE: # %bb.0: 32 ; SKYLAKE-NEXT: #APP 33 ; SKYLAKE-NEXT: adcxl %edi, %edi # sched: [1:0.50] 34 ; SKYLAKE-NEXT: adcxq %rdx, %rdx # sched: [1:0.50] 35 ; SKYLAKE-NEXT: adcxl (%rsi), %edi # sched: [6:0.50] 36 ; SKYLAKE-NEXT: adcxq (%rcx), %rdx # sched: [6:0.50] 37 ; SKYLAKE-NEXT: #NO_APP 38 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 39 ; 40 ; KNL-LABEL: test_adcx: 41 ; KNL: # %bb.0: 42 ; KNL-NEXT: #APP 43 ; KNL-NEXT: adcxl %edi, %edi # sched: [2:0.50] 44 ; KNL-NEXT: adcxq %rdx, %rdx # sched: [2:0.50] 45 ; KNL-NEXT: adcxl (%rsi), %edi # sched: [7:0.50] 46 ; KNL-NEXT: adcxq (%rcx), %rdx # sched: [7:0.50] 47 ; KNL-NEXT: #NO_APP 48 ; KNL-NEXT: retq # sched: [7:1.00] 49 ; 50 ; ZNVER1-LABEL: test_adcx: 51 ; ZNVER1: # %bb.0: 52 ; ZNVER1-NEXT: #APP 53 ; ZNVER1-NEXT: adcxl %edi, %edi # sched: [1:0.25] 54 ; ZNVER1-NEXT: adcxq %rdx, %rdx # sched: [1:0.25] 55 ; ZNVER1-NEXT: adcxl (%rsi), %edi # sched: [5:0.50] 56 ; ZNVER1-NEXT: adcxq (%rcx), %rdx # sched: [5:0.50] 57 ; ZNVER1-NEXT: #NO_APP 58 ; ZNVER1-NEXT: retq # sched: [1:0.50] 59 tail call void asm "adcx $0, $0 \0A\09 adcx $2, $2 \0A\09 adcx $1, $0 \0A\09 adcx $3, $2", "r,*m,r,*m"(i32 %a0, i32* %a1, i64 %a2, i64* %a3) nounwind 60 ret void 61 } 62 define void @test_adox(i32 %a0, i32* %a1, i64 %a2, i64* %a3) optsize { 63 ; GENERIC-LABEL: test_adox: 64 ; GENERIC: # %bb.0: 65 ; GENERIC-NEXT: #APP 66 ; GENERIC-NEXT: adoxl %edi, %edi # sched: [2:0.67] 67 ; GENERIC-NEXT: adoxq %rdx, %rdx # sched: [2:0.67] 68 ; GENERIC-NEXT: adoxl (%rsi), %edi # sched: [7:0.67] 69 ; GENERIC-NEXT: adoxq (%rcx), %rdx # sched: [7:0.67] 70 ; GENERIC-NEXT: #NO_APP 71 ; GENERIC-NEXT: retq # sched: [1:1.00] 72 ; 73 ; BROADWELL-LABEL: test_adox: 74 ; BROADWELL: # %bb.0: 75 ; BROADWELL-NEXT: #APP 76 ; BROADWELL-NEXT: adoxl %edi, %edi # sched: [1:0.50] 77 ; BROADWELL-NEXT: adoxq %rdx, %rdx # sched: [1:0.50] 78 ; BROADWELL-NEXT: adoxl (%rsi), %edi # sched: [6:0.50] 79 ; BROADWELL-NEXT: adoxq (%rcx), %rdx # sched: [6:0.50] 80 ; BROADWELL-NEXT: #NO_APP 81 ; BROADWELL-NEXT: retq # sched: [7:1.00] 82 ; 83 ; SKYLAKE-LABEL: test_adox: 84 ; SKYLAKE: # %bb.0: 85 ; SKYLAKE-NEXT: #APP 86 ; SKYLAKE-NEXT: adoxl %edi, %edi # sched: [1:0.50] 87 ; SKYLAKE-NEXT: adoxq %rdx, %rdx # sched: [1:0.50] 88 ; SKYLAKE-NEXT: adoxl (%rsi), %edi # sched: [6:0.50] 89 ; SKYLAKE-NEXT: adoxq (%rcx), %rdx # sched: [6:0.50] 90 ; SKYLAKE-NEXT: #NO_APP 91 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 92 ; 93 ; KNL-LABEL: test_adox: 94 ; KNL: # %bb.0: 95 ; KNL-NEXT: #APP 96 ; KNL-NEXT: adoxl %edi, %edi # sched: [2:0.50] 97 ; KNL-NEXT: adoxq %rdx, %rdx # sched: [2:0.50] 98 ; KNL-NEXT: adoxl (%rsi), %edi # sched: [7:0.50] 99 ; KNL-NEXT: adoxq (%rcx), %rdx # sched: [7:0.50] 100 ; KNL-NEXT: #NO_APP 101 ; KNL-NEXT: retq # sched: [7:1.00] 102 ; 103 ; ZNVER1-LABEL: test_adox: 104 ; ZNVER1: # %bb.0: 105 ; ZNVER1-NEXT: #APP 106 ; ZNVER1-NEXT: adoxl %edi, %edi # sched: [1:0.25] 107 ; ZNVER1-NEXT: adoxq %rdx, %rdx # sched: [1:0.25] 108 ; ZNVER1-NEXT: adoxl (%rsi), %edi # sched: [5:0.50] 109 ; ZNVER1-NEXT: adoxq (%rcx), %rdx # sched: [5:0.50] 110 ; ZNVER1-NEXT: #NO_APP 111 ; ZNVER1-NEXT: retq # sched: [1:0.50] 112 tail call void asm "adox $0, $0 \0A\09 adox $2, $2 \0A\09 adox $1, $0 \0A\09 adox $3, $2", "r,*m,r,*m"(i32 %a0, i32* %a1, i64 %a2, i64* %a3) nounwind 113 ret void 114 } 115