From: Simon Pilgrim Date: Mon, 11 Dec 2017 18:32:59 +0000 (+0000) Subject: [X86] Add CMP/TEST schedule tests X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9497cd45ac83adbbfbd7654328c28f6269aac173;p=llvm [X86] Add CMP/TEST schedule tests git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320402 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/X86/schedule-x86_64.ll b/test/CodeGen/X86/schedule-x86_64.ll index b56af8a0191..e7b9406afe8 100644 --- a/test/CodeGen/X86/schedule-x86_64.ll +++ b/test/CodeGen/X86/schedule-x86_64.ll @@ -3763,7245 +3763,7886 @@ define void @test_clc_cld_cmc() optsize { ret void } -; TODO - test_cmp - -define void @test_cmps() optsize { -; GENERIC-LABEL: test_cmps: +define void @test_cmp_8(i8 %a0, i8* %a1) optsize { +; GENERIC-LABEL: test_cmp_8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [8:1.00] -; GENERIC-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [8:1.00] -; GENERIC-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [8:1.00] -; GENERIC-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [8:1.00] +; GENERIC-NEXT: cmpb $7, %al # sched: [1:0.33] +; GENERIC-NEXT: cmpb $7, %dil # sched: [1:0.33] +; GENERIC-NEXT: cmpb $7, (%rsi) # sched: [6:0.50] +; GENERIC-NEXT: cmpb %dil, %dil # sched: [1:0.33] +; GENERIC-NEXT: cmpb %dil, (%rsi) # sched: [6:0.50] +; GENERIC-NEXT: cmpb (%rsi), %dil # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_cmps: +; ATOM-LABEL: test_cmp_8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [3:1.50] -; ATOM-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [3:1.50] -; ATOM-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [3:1.50] -; ATOM-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [3:1.50] +; ATOM-NEXT: cmpb $7, %al # sched: [1:0.50] +; ATOM-NEXT: cmpb $7, %dil # sched: [1:0.50] +; ATOM-NEXT: cmpb $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpb %dil, %dil # sched: [1:0.50] +; ATOM-NEXT: cmpb %dil, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpb (%rsi), %dil # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_cmps: +; SLM-LABEL: test_cmp_8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:1.00] -; SLM-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:1.00] -; SLM-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:1.00] -; SLM-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:1.00] +; SLM-NEXT: cmpb $7, %al # sched: [1:0.50] +; SLM-NEXT: cmpb $7, %dil # sched: [1:0.50] +; SLM-NEXT: cmpb $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpb %dil, %dil # sched: [1:0.50] +; SLM-NEXT: cmpb %dil, (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpb (%rsi), %dil # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_cmps: +; SANDY-LABEL: test_cmp_8: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [8:1.00] -; SANDY-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [8:1.00] -; SANDY-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [8:1.00] -; SANDY-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [8:1.00] +; SANDY-NEXT: cmpb $7, %al # sched: [1:0.33] +; SANDY-NEXT: cmpb $7, %dil # sched: [1:0.33] +; SANDY-NEXT: cmpb $7, (%rsi) # sched: [6:0.50] +; SANDY-NEXT: cmpb %dil, %dil # sched: [1:0.33] +; SANDY-NEXT: cmpb %dil, (%rsi) # sched: [6:0.50] +; SANDY-NEXT: cmpb (%rsi), %dil # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_cmps: +; HASWELL-LABEL: test_cmp_8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [4:1.00] -; HASWELL-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [4:1.00] -; HASWELL-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [4:1.00] -; HASWELL-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [4:1.00] +; HASWELL-NEXT: cmpb $7, %al # sched: [1:0.25] +; HASWELL-NEXT: cmpb $7, %dil # sched: [1:0.25] +; HASWELL-NEXT: cmpb $7, (%rsi) # sched: [6:0.50] +; HASWELL-NEXT: cmpb %dil, %dil # sched: [1:0.25] +; HASWELL-NEXT: cmpb %dil, (%rsi) # sched: [6:0.50] +; HASWELL-NEXT: cmpb (%rsi), %dil # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_cmps: +; BROADWELL-LABEL: test_cmp_8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25] -; BROADWELL-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25] -; BROADWELL-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25] -; BROADWELL-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25] +; BROADWELL-NEXT: cmpb $7, %al # sched: [1:0.25] +; BROADWELL-NEXT: cmpb $7, %dil # sched: [1:0.25] +; BROADWELL-NEXT: cmpb $7, (%rsi) # sched: [6:0.50] +; BROADWELL-NEXT: cmpb %dil, %dil # sched: [1:0.25] +; BROADWELL-NEXT: cmpb %dil, (%rsi) # sched: [6:0.50] +; BROADWELL-NEXT: cmpb (%rsi), %dil # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_cmps: +; SKYLAKE-LABEL: test_cmp_8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25] -; SKYLAKE-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25] -; SKYLAKE-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25] -; SKYLAKE-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25] +; SKYLAKE-NEXT: cmpb $7, %al # sched: [1:0.25] +; SKYLAKE-NEXT: cmpb $7, %dil # sched: [1:0.25] +; SKYLAKE-NEXT: cmpb $7, (%rsi) # sched: [6:0.50] +; SKYLAKE-NEXT: cmpb %dil, %dil # sched: [1:0.25] +; SKYLAKE-NEXT: cmpb %dil, (%rsi) # sched: [6:0.50] +; SKYLAKE-NEXT: cmpb (%rsi), %dil # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_cmps: +; SKX-LABEL: test_cmp_8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25] -; SKX-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25] -; SKX-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25] -; SKX-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25] +; SKX-NEXT: cmpb $7, %al # sched: [1:0.25] +; SKX-NEXT: cmpb $7, %dil # sched: [1:0.25] +; SKX-NEXT: cmpb $7, (%rsi) # sched: [6:0.50] +; SKX-NEXT: cmpb %dil, %dil # sched: [1:0.25] +; SKX-NEXT: cmpb %dil, (%rsi) # sched: [6:0.50] +; SKX-NEXT: cmpb (%rsi), %dil # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_cmps: +; BTVER2-LABEL: test_cmp_8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:0.17] -; BTVER2-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:0.17] -; BTVER2-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:0.17] -; BTVER2-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:0.17] +; BTVER2-NEXT: cmpb $7, %al # sched: [1:0.50] +; BTVER2-NEXT: cmpb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: cmpb $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpb %dil, %dil # sched: [1:0.50] +; BTVER2-NEXT: cmpb %dil, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpb (%rsi), %dil # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_cmps: +; ZNVER1-LABEL: test_cmp_8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:?] -; ZNVER1-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:?] -; ZNVER1-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:?] -; ZNVER1-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:?] +; ZNVER1-NEXT: cmpb $7, %al # sched: [1:0.25] +; ZNVER1-NEXT: cmpb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: cmpb $7, (%rsi) # sched: [5:1.00] +; ZNVER1-NEXT: cmpb %dil, %dil # sched: [1:0.25] +; ZNVER1-NEXT: cmpb %dil, (%rsi) # sched: [5:1.00] +; ZNVER1-NEXT: cmpb (%rsi), %dil # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "cmpsb \0A\09 cmpsw \0A\09 cmpsl \0A\09 cmpsq", ""() + tail call void asm "cmpb $2, %AL \0A\09 cmpb $2, $0 \0A\09 cmpb $2, $1 \0A\09 cmpb $0, $0 \0A\09 cmpb $0, $1 \0A\09 cmpb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind ret void } - -define void @test_cmpxchg_8(i8 %a0, i8 %a1, i8 *%a2) optsize { -; GENERIC-LABEL: test_cmpxchg_8: +define void @test_cmp_16(i16 %a0, i16* %a1) optsize { +; GENERIC-LABEL: test_cmp_16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: cmpxchgb %dil, %sil # sched: [5:1.33] -; GENERIC-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: cmpw $511, %ax # imm = 0x1FF +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: cmpw $511, %di # imm = 0x1FF +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; GENERIC-NEXT: # sched: [6:0.50] +; GENERIC-NEXT: cmpw $7, %di # sched: [1:0.33] +; GENERIC-NEXT: cmpw $7, (%rsi) # sched: [6:0.50] +; GENERIC-NEXT: cmpw %di, %di # sched: [1:0.33] +; GENERIC-NEXT: cmpw %di, (%rsi) # sched: [6:0.50] +; GENERIC-NEXT: cmpw (%rsi), %di # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_cmpxchg_8: +; ATOM-LABEL: test_cmp_16: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: cmpxchgb %dil, %sil # sched: [9:4.50] -; ATOM-NEXT: cmpxchgb %dil, (%rdx) # sched: [6:3.00] +; ATOM-NEXT: cmpw $511, %ax # imm = 0x1FF +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: cmpw $511, %di # imm = 0x1FF +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: cmpw $7, %di # sched: [1:0.50] +; ATOM-NEXT: cmpw $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpw %di, %di # sched: [1:0.50] +; ATOM-NEXT: cmpw %di, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpw (%rsi), %di # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_cmpxchg_8: +; SLM-LABEL: test_cmp_16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: cmpxchgb %dil, %sil # sched: [1:0.50] -; SLM-NEXT: cmpxchgb %dil, (%rdx) # sched: [4:2.00] +; SLM-NEXT: cmpw $511, %ax # imm = 0x1FF +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: cmpw $511, %di # imm = 0x1FF +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: cmpw $7, %di # sched: [1:0.50] +; SLM-NEXT: cmpw $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpw %di, %di # sched: [1:0.50] +; SLM-NEXT: cmpw %di, (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpw (%rsi), %di # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_cmpxchg_8: +; SANDY-LABEL: test_cmp_16: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: cmpxchgb %dil, %sil # sched: [5:1.33] -; SANDY-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: cmpw $511, %ax # imm = 0x1FF +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: cmpw $511, %di # imm = 0x1FF +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; SANDY-NEXT: # sched: [6:0.50] +; SANDY-NEXT: cmpw $7, %di # sched: [1:0.33] +; SANDY-NEXT: cmpw $7, (%rsi) # sched: [6:0.50] +; SANDY-NEXT: cmpw %di, %di # sched: [1:0.33] +; SANDY-NEXT: cmpw %di, (%rsi) # sched: [6:0.50] +; SANDY-NEXT: cmpw (%rsi), %di # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_cmpxchg_8: +; HASWELL-LABEL: test_cmp_16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: cmpxchgb %dil, %sil # sched: [5:1.25] -; HASWELL-NEXT: cmpxchgb %dil, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: cmpw $511, %ax # imm = 0x1FF +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: cmpw $511, %di # imm = 0x1FF +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; HASWELL-NEXT: # sched: [6:0.50] +; HASWELL-NEXT: cmpw $7, %di # sched: [1:0.25] +; HASWELL-NEXT: cmpw $7, (%rsi) # sched: [6:0.50] +; HASWELL-NEXT: cmpw %di, %di # sched: [1:0.25] +; HASWELL-NEXT: cmpw %di, (%rsi) # sched: [6:0.50] +; HASWELL-NEXT: cmpw (%rsi), %di # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_cmpxchg_8: +; BROADWELL-LABEL: test_cmp_16: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: cmpxchgb %dil, %sil # sched: [5:1.25] -; BROADWELL-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: cmpw $511, %ax # imm = 0x1FF +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: cmpw $511, %di # imm = 0x1FF +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; BROADWELL-NEXT: # sched: [6:0.50] +; BROADWELL-NEXT: cmpw $7, %di # sched: [1:0.25] +; BROADWELL-NEXT: cmpw $7, (%rsi) # sched: [6:0.50] +; BROADWELL-NEXT: cmpw %di, %di # sched: [1:0.25] +; BROADWELL-NEXT: cmpw %di, (%rsi) # sched: [6:0.50] +; BROADWELL-NEXT: cmpw (%rsi), %di # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_cmpxchg_8: +; SKYLAKE-LABEL: test_cmp_16: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: cmpxchgb %dil, %sil # sched: [5:1.25] -; SKYLAKE-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] +; SKYLAKE-NEXT: cmpw $511, %ax # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: cmpw $511, %di # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [6:0.50] +; SKYLAKE-NEXT: cmpw $7, %di # sched: [1:0.25] +; SKYLAKE-NEXT: cmpw $7, (%rsi) # sched: [6:0.50] +; SKYLAKE-NEXT: cmpw %di, %di # sched: [1:0.25] +; SKYLAKE-NEXT: cmpw %di, (%rsi) # sched: [6:0.50] +; SKYLAKE-NEXT: cmpw (%rsi), %di # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_cmpxchg_8: +; SKX-LABEL: test_cmp_16: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: cmpxchgb %dil, %sil # sched: [5:1.25] -; SKX-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] +; SKX-NEXT: cmpw $511, %ax # imm = 0x1FF +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: cmpw $511, %di # imm = 0x1FF +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; SKX-NEXT: # sched: [6:0.50] +; SKX-NEXT: cmpw $7, %di # sched: [1:0.25] +; SKX-NEXT: cmpw $7, (%rsi) # sched: [6:0.50] +; SKX-NEXT: cmpw %di, %di # sched: [1:0.25] +; SKX-NEXT: cmpw %di, (%rsi) # sched: [6:0.50] +; SKX-NEXT: cmpw (%rsi), %di # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_cmpxchg_8: +; BTVER2-LABEL: test_cmp_16: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: cmpxchgb %dil, %sil # sched: [1:0.50] -; BTVER2-NEXT: cmpxchgb %dil, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: cmpw $511, %ax # imm = 0x1FF +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: cmpw $511, %di # imm = 0x1FF +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: cmpw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: cmpw $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpw %di, %di # sched: [1:0.50] +; BTVER2-NEXT: cmpw %di, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpw (%rsi), %di # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_cmpxchg_8: +; ZNVER1-LABEL: test_cmp_16: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: cmpxchgb %dil, %sil # sched: [1:0.25] -; ZNVER1-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:0.50] +; ZNVER1-NEXT: cmpw $511, %ax # imm = 0x1FF +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: cmpw $511, %di # imm = 0x1FF +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: cmpw $511, (%rsi) # imm = 0x1FF +; ZNVER1-NEXT: # sched: [5:1.00] +; ZNVER1-NEXT: cmpw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: cmpw $7, (%rsi) # sched: [5:1.00] +; ZNVER1-NEXT: cmpw %di, %di # sched: [1:0.25] +; ZNVER1-NEXT: cmpw %di, (%rsi) # sched: [5:1.00] +; ZNVER1-NEXT: cmpw (%rsi), %di # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "cmpxchgb $0, $1 \0a\09 cmpxchgb $0, $2", "r,r,*m"(i8 %a0, i8 %a1, i8 *%a2) nounwind + tail call void asm "cmpw $2, %AX \0A\09 cmpw $2, $0 \0A\09 cmpw $2, $1 \0A\09 cmpw $3, $0 \0A\09 cmpw $3, $1 \0A\09 cmpw $0, $0 \0A\09 cmpw $0, $1 \0A\09 cmpw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind ret void } -define void @test_cmpxchg_16(i16 %a0, i16 %a1, i16 *%a2) optsize { -; GENERIC-LABEL: test_cmpxchg_16: +define void @test_cmp_32(i32 %a0, i32* %a1) optsize { +; GENERIC-LABEL: test_cmp_32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: cmpxchgw %di, %si # sched: [5:1.33] -; GENERIC-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [6:0.50] +; GENERIC-NEXT: cmpl $7, %edi # sched: [1:0.33] +; GENERIC-NEXT: cmpl $7, (%rsi) # sched: [6:0.50] +; GENERIC-NEXT: cmpl %edi, %edi # sched: [1:0.33] +; GENERIC-NEXT: cmpl %edi, (%rsi) # sched: [6:0.50] +; GENERIC-NEXT: cmpl (%rsi), %edi # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_cmpxchg_16: +; ATOM-LABEL: test_cmp_32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: cmpxchgw %di, %si # sched: [15:7.50] -; ATOM-NEXT: cmpxchgw %di, (%rdx) # sched: [14:7.00] +; ATOM-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: cmpl $7, %edi # sched: [1:0.50] +; ATOM-NEXT: cmpl $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpl %edi, %edi # sched: [1:0.50] +; ATOM-NEXT: cmpl %edi, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpl (%rsi), %edi # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_cmpxchg_16: +; SLM-LABEL: test_cmp_32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: cmpxchgw %di, %si # sched: [1:0.50] -; SLM-NEXT: cmpxchgw %di, (%rdx) # sched: [4:2.00] +; SLM-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: cmpl $7, %edi # sched: [1:0.50] +; SLM-NEXT: cmpl $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpl %edi, %edi # sched: [1:0.50] +; SLM-NEXT: cmpl %edi, (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpl (%rsi), %edi # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_cmpxchg_16: +; SANDY-LABEL: test_cmp_32: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: cmpxchgw %di, %si # sched: [5:1.33] -; SANDY-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [6:0.50] +; SANDY-NEXT: cmpl $7, %edi # sched: [1:0.33] +; SANDY-NEXT: cmpl $7, (%rsi) # sched: [6:0.50] +; SANDY-NEXT: cmpl %edi, %edi # sched: [1:0.33] +; SANDY-NEXT: cmpl %edi, (%rsi) # sched: [6:0.50] +; SANDY-NEXT: cmpl (%rsi), %edi # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_cmpxchg_16: +; HASWELL-LABEL: test_cmp_32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: cmpxchgw %di, %si # sched: [5:1.25] -; HASWELL-NEXT: cmpxchgw %di, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [6:0.50] +; HASWELL-NEXT: cmpl $7, %edi # sched: [1:0.25] +; HASWELL-NEXT: cmpl $7, (%rsi) # sched: [6:0.50] +; HASWELL-NEXT: cmpl %edi, %edi # sched: [1:0.25] +; HASWELL-NEXT: cmpl %edi, (%rsi) # sched: [6:0.50] +; HASWELL-NEXT: cmpl (%rsi), %edi # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_cmpxchg_16: +; BROADWELL-LABEL: test_cmp_32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: cmpxchgw %di, %si # sched: [5:1.25] -; BROADWELL-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [6:0.50] +; BROADWELL-NEXT: cmpl $7, %edi # sched: [1:0.25] +; BROADWELL-NEXT: cmpl $7, (%rsi) # sched: [6:0.50] +; BROADWELL-NEXT: cmpl %edi, %edi # sched: [1:0.25] +; BROADWELL-NEXT: cmpl %edi, (%rsi) # sched: [6:0.50] +; BROADWELL-NEXT: cmpl (%rsi), %edi # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_cmpxchg_16: +; SKYLAKE-LABEL: test_cmp_32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: cmpxchgw %di, %si # sched: [5:1.25] -; SKYLAKE-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] +; SKYLAKE-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [6:0.50] +; SKYLAKE-NEXT: cmpl $7, %edi # sched: [1:0.25] +; SKYLAKE-NEXT: cmpl $7, (%rsi) # sched: [6:0.50] +; SKYLAKE-NEXT: cmpl %edi, %edi # sched: [1:0.25] +; SKYLAKE-NEXT: cmpl %edi, (%rsi) # sched: [6:0.50] +; SKYLAKE-NEXT: cmpl (%rsi), %edi # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_cmpxchg_16: +; SKX-LABEL: test_cmp_32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: cmpxchgw %di, %si # sched: [5:1.25] -; SKX-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] +; SKX-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: # sched: [6:0.50] +; SKX-NEXT: cmpl $7, %edi # sched: [1:0.25] +; SKX-NEXT: cmpl $7, (%rsi) # sched: [6:0.50] +; SKX-NEXT: cmpl %edi, %edi # sched: [1:0.25] +; SKX-NEXT: cmpl %edi, (%rsi) # sched: [6:0.50] +; SKX-NEXT: cmpl (%rsi), %edi # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_cmpxchg_16: +; BTVER2-LABEL: test_cmp_32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: cmpxchgw %di, %si # sched: [1:0.50] -; BTVER2-NEXT: cmpxchgw %di, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: cmpl $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: cmpl $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpl %edi, %edi # sched: [1:0.50] +; BTVER2-NEXT: cmpl %edi, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpl (%rsi), %edi # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_cmpxchg_16: +; ZNVER1-LABEL: test_cmp_32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: cmpxchgw %di, %si # sched: [1:0.25] -; ZNVER1-NEXT: cmpxchgw %di, (%rdx) # sched: [8:0.50] +; ZNVER1-NEXT: cmpl $665536, %eax # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: cmpl $665536, %edi # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: cmpl $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:1.00] +; ZNVER1-NEXT: cmpl $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: cmpl $7, (%rsi) # sched: [5:1.00] +; ZNVER1-NEXT: cmpl %edi, %edi # sched: [1:0.25] +; ZNVER1-NEXT: cmpl %edi, (%rsi) # sched: [5:1.00] +; ZNVER1-NEXT: cmpl (%rsi), %edi # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "cmpxchgw $0, $1 \0a\09 cmpxchgw $0, $2", "r,r,*m"(i16 %a0, i16 %a1, i16 *%a2) nounwind + tail call void asm "cmpl $2, %EAX \0A\09 cmpl $2, $0 \0A\09 cmpl $2, $1 \0A\09 cmpl $3, $0 \0A\09 cmpl $3, $1 \0A\09 cmpl $0, $0 \0A\09 cmpl $0, $1 \0A\09 cmpl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind ret void } -define void @test_cmpxchg_32(i32 %a0, i32 %a1, i32 *%a2) optsize { -; GENERIC-LABEL: test_cmpxchg_32: +define void @test_cmp_64(i64 %a0, i64* %a1) optsize { +; GENERIC-LABEL: test_cmp_64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: cmpxchgl %edi, %esi # sched: [5:1.33] -; GENERIC-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [6:0.50] +; GENERIC-NEXT: cmpq $7, %rdi # sched: [1:0.33] +; GENERIC-NEXT: cmpq $7, (%rsi) # sched: [6:0.50] +; GENERIC-NEXT: cmpq %rdi, %rdi # sched: [1:0.33] +; GENERIC-NEXT: cmpq %rdi, (%rsi) # sched: [6:0.50] +; GENERIC-NEXT: cmpq (%rsi), %rdi # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_cmpxchg_32: +; ATOM-LABEL: test_cmp_64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: cmpxchgl %edi, %esi # sched: [15:7.50] -; ATOM-NEXT: cmpxchgl %edi, (%rdx) # sched: [14:7.00] +; ATOM-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: cmpq $7, %rdi # sched: [1:0.50] +; ATOM-NEXT: cmpq $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpq %rdi, %rdi # sched: [1:0.50] +; ATOM-NEXT: cmpq %rdi, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpq (%rsi), %rdi # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_cmpxchg_32: +; SLM-LABEL: test_cmp_64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: cmpxchgl %edi, %esi # sched: [1:0.50] -; SLM-NEXT: cmpxchgl %edi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: cmpq $7, %rdi # sched: [1:0.50] +; SLM-NEXT: cmpq $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpq %rdi, %rdi # sched: [1:0.50] +; SLM-NEXT: cmpq %rdi, (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpq (%rsi), %rdi # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_cmpxchg_32: +; SANDY-LABEL: test_cmp_64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: cmpxchgl %edi, %esi # sched: [5:1.33] -; SANDY-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [6:0.50] +; SANDY-NEXT: cmpq $7, %rdi # sched: [1:0.33] +; SANDY-NEXT: cmpq $7, (%rsi) # sched: [6:0.50] +; SANDY-NEXT: cmpq %rdi, %rdi # sched: [1:0.33] +; SANDY-NEXT: cmpq %rdi, (%rsi) # sched: [6:0.50] +; SANDY-NEXT: cmpq (%rsi), %rdi # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_cmpxchg_32: +; HASWELL-LABEL: test_cmp_64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: cmpxchgl %edi, %esi # sched: [5:1.25] -; HASWELL-NEXT: cmpxchgl %edi, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [6:0.50] +; HASWELL-NEXT: cmpq $7, %rdi # sched: [1:0.25] +; HASWELL-NEXT: cmpq $7, (%rsi) # sched: [6:0.50] +; HASWELL-NEXT: cmpq %rdi, %rdi # sched: [1:0.25] +; HASWELL-NEXT: cmpq %rdi, (%rsi) # sched: [6:0.50] +; HASWELL-NEXT: cmpq (%rsi), %rdi # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_cmpxchg_32: +; BROADWELL-LABEL: test_cmp_64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: cmpxchgl %edi, %esi # sched: [5:1.25] -; BROADWELL-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [6:0.50] +; BROADWELL-NEXT: cmpq $7, %rdi # sched: [1:0.25] +; BROADWELL-NEXT: cmpq $7, (%rsi) # sched: [6:0.50] +; BROADWELL-NEXT: cmpq %rdi, %rdi # sched: [1:0.25] +; BROADWELL-NEXT: cmpq %rdi, (%rsi) # sched: [6:0.50] +; BROADWELL-NEXT: cmpq (%rsi), %rdi # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_cmpxchg_32: +; SKYLAKE-LABEL: test_cmp_64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: cmpxchgl %edi, %esi # sched: [5:1.25] -; SKYLAKE-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] +; SKYLAKE-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [6:0.50] +; SKYLAKE-NEXT: cmpq $7, %rdi # sched: [1:0.25] +; SKYLAKE-NEXT: cmpq $7, (%rsi) # sched: [6:0.50] +; SKYLAKE-NEXT: cmpq %rdi, %rdi # sched: [1:0.25] +; SKYLAKE-NEXT: cmpq %rdi, (%rsi) # sched: [6:0.50] +; SKYLAKE-NEXT: cmpq (%rsi), %rdi # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_cmpxchg_32: +; SKX-LABEL: test_cmp_64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: cmpxchgl %edi, %esi # sched: [5:1.25] -; SKX-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] +; SKX-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: # sched: [6:0.50] +; SKX-NEXT: cmpq $7, %rdi # sched: [1:0.25] +; SKX-NEXT: cmpq $7, (%rsi) # sched: [6:0.50] +; SKX-NEXT: cmpq %rdi, %rdi # sched: [1:0.25] +; SKX-NEXT: cmpq %rdi, (%rsi) # sched: [6:0.50] +; SKX-NEXT: cmpq (%rsi), %rdi # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_cmpxchg_32: +; BTVER2-LABEL: test_cmp_64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: cmpxchgl %edi, %esi # sched: [1:0.50] -; BTVER2-NEXT: cmpxchgl %edi, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: cmpq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: cmpq $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpq %rdi, %rdi # sched: [1:0.50] +; BTVER2-NEXT: cmpq %rdi, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpq (%rsi), %rdi # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_cmpxchg_32: +; ZNVER1-LABEL: test_cmp_64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: cmpxchgl %edi, %esi # sched: [1:0.25] -; ZNVER1-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:0.50] +; ZNVER1-NEXT: cmpq $665536, %rax # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: cmpq $665536, %rdi # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: cmpq $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:1.00] +; ZNVER1-NEXT: cmpq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: cmpq $7, (%rsi) # sched: [5:1.00] +; ZNVER1-NEXT: cmpq %rdi, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: cmpq %rdi, (%rsi) # sched: [5:1.00] +; ZNVER1-NEXT: cmpq (%rsi), %rdi # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "cmpxchgl $0, $1 \0a\09 cmpxchgl $0, $2", "r,r,*m"(i32 %a0, i32 %a1, i32 *%a2) nounwind + tail call void asm "cmpq $2, %RAX \0A\09 cmpq $2, $0 \0A\09 cmpq $2, $1 \0A\09 cmpq $3, $0 \0A\09 cmpq $3, $1 \0A\09 cmpq $0, $0 \0A\09 cmpq $0, $1 \0A\09 cmpq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind ret void } -define void @test_cmpxchg_64(i64 %a0, i64 %a1, i64 *%a2) optsize { -; GENERIC-LABEL: test_cmpxchg_64: + +define void @test_cmps() optsize { +; GENERIC-LABEL: test_cmps: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.33] -; GENERIC-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [8:1.00] +; GENERIC-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [8:1.00] +; GENERIC-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [8:1.00] +; GENERIC-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [8:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_cmpxchg_64: +; ATOM-LABEL: test_cmps: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: cmpxchgq %rdi, %rsi # sched: [15:7.50] -; ATOM-NEXT: cmpxchgq %rdi, (%rdx) # sched: [14:7.00] +; ATOM-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [3:1.50] +; ATOM-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [3:1.50] +; ATOM-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [3:1.50] +; ATOM-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [3:1.50] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_cmpxchg_64: +; SLM-LABEL: test_cmps: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: cmpxchgq %rdi, %rsi # sched: [1:0.50] -; SLM-NEXT: cmpxchgq %rdi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:1.00] +; SLM-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:1.00] +; SLM-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:1.00] +; SLM-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_cmpxchg_64: +; SANDY-LABEL: test_cmps: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.33] -; SANDY-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [8:1.00] +; SANDY-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [8:1.00] +; SANDY-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [8:1.00] +; SANDY-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [8:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_cmpxchg_64: +; HASWELL-LABEL: test_cmps: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.25] -; HASWELL-NEXT: cmpxchgq %rdi, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [4:1.00] +; HASWELL-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [4:1.00] +; HASWELL-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [4:1.00] +; HASWELL-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [4:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_cmpxchg_64: +; BROADWELL-LABEL: test_cmps: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.25] -; BROADWELL-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25] +; BROADWELL-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25] +; BROADWELL-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25] +; BROADWELL-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_cmpxchg_64: +; SKYLAKE-LABEL: test_cmps: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.25] -; SKYLAKE-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] +; SKYLAKE-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25] +; SKYLAKE-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25] +; SKYLAKE-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25] +; SKYLAKE-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_cmpxchg_64: +; SKX-LABEL: test_cmps: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.25] -; SKX-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] +; SKX-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25] +; SKX-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25] +; SKX-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25] +; SKX-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_cmpxchg_64: +; BTVER2-LABEL: test_cmps: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: cmpxchgq %rdi, %rsi # sched: [1:0.50] -; BTVER2-NEXT: cmpxchgq %rdi, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:0.17] +; BTVER2-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:0.17] +; BTVER2-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:0.17] +; BTVER2-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_cmpxchg_64: +; ZNVER1-LABEL: test_cmps: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: cmpxchgq %rdi, %rsi # sched: [1:0.25] -; ZNVER1-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:0.50] +; ZNVER1-NEXT: cmpsb %es:(%rdi), (%rsi) # sched: [100:?] +; ZNVER1-NEXT: cmpsw %es:(%rdi), (%rsi) # sched: [100:?] +; ZNVER1-NEXT: cmpsl %es:(%rdi), (%rsi) # sched: [100:?] +; ZNVER1-NEXT: cmpsq %es:(%rdi), (%rsi) # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "cmpxchgq $0, $1 \0a\09 cmpxchgq $0, $2", "r,r,*m"(i64 %a0, i64 %a1, i64 *%a2) nounwind + call void asm sideeffect "cmpsb \0A\09 cmpsw \0A\09 cmpsl \0A\09 cmpsq", ""() ret void } -define void @test_cmpxchg8b_cmpxchg16b(i8 *%a0) optsize { -; GENERIC-LABEL: test_cmpxchg8b_cmpxchg16b: + +define void @test_cmpxchg_8(i8 %a0, i8 %a1, i8 *%a2) optsize { +; GENERIC-LABEL: test_cmpxchg_8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: cmpxchg8b (%rdi) # sched: [5:1.00] -; GENERIC-NEXT: cmpxchg16b (%rdi) # sched: [5:1.00] +; GENERIC-NEXT: cmpxchgb %dil, %sil # sched: [5:1.33] +; GENERIC-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_cmpxchg8b_cmpxchg16b: +; ATOM-LABEL: test_cmpxchg_8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: cmpxchg8b (%rdi) # sched: [18:9.00] -; ATOM-NEXT: cmpxchg16b (%rdi) # sched: [22:11.00] +; ATOM-NEXT: cmpxchgb %dil, %sil # sched: [9:4.50] +; ATOM-NEXT: cmpxchgb %dil, (%rdx) # sched: [6:3.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_cmpxchg8b_cmpxchg16b: +; SLM-LABEL: test_cmpxchg_8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: cmpxchg8b (%rdi) # sched: [4:2.00] -; SLM-NEXT: cmpxchg16b (%rdi) # sched: [4:2.00] +; SLM-NEXT: cmpxchgb %dil, %sil # sched: [1:0.50] +; SLM-NEXT: cmpxchgb %dil, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_cmpxchg8b_cmpxchg16b: +; SANDY-LABEL: test_cmpxchg_8: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: cmpxchg8b (%rdi) # sched: [5:1.00] -; SANDY-NEXT: cmpxchg16b (%rdi) # sched: [5:1.00] +; SANDY-NEXT: cmpxchgb %dil, %sil # sched: [5:1.33] +; SANDY-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_cmpxchg8b_cmpxchg16b: +; HASWELL-LABEL: test_cmpxchg_8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: cmpxchg8b (%rdi) # sched: [17:2.75] -; HASWELL-NEXT: cmpxchg16b (%rdi) # sched: [22:4.00] +; HASWELL-NEXT: cmpxchgb %dil, %sil # sched: [5:1.25] +; HASWELL-NEXT: cmpxchgb %dil, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_cmpxchg8b_cmpxchg16b: +; BROADWELL-LABEL: test_cmpxchg_8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: cmpxchg8b (%rdi) # sched: [16:2.75] -; BROADWELL-NEXT: cmpxchg16b (%rdi) # sched: [21:4.00] +; BROADWELL-NEXT: cmpxchgb %dil, %sil # sched: [5:1.25] +; BROADWELL-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_cmpxchg8b_cmpxchg16b: +; SKYLAKE-LABEL: test_cmpxchg_8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: cmpxchg8b (%rdi) # sched: [16:2.75] -; SKYLAKE-NEXT: cmpxchg16b (%rdi) # sched: [23:4.00] +; SKYLAKE-NEXT: cmpxchgb %dil, %sil # sched: [5:1.25] +; SKYLAKE-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_cmpxchg8b_cmpxchg16b: +; SKX-LABEL: test_cmpxchg_8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: cmpxchg8b (%rdi) # sched: [16:2.75] -; SKX-NEXT: cmpxchg16b (%rdi) # sched: [23:4.00] +; SKX-NEXT: cmpxchgb %dil, %sil # sched: [5:1.25] +; SKX-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_cmpxchg8b_cmpxchg16b: +; BTVER2-LABEL: test_cmpxchg_8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: cmpxchg8b (%rdi) # sched: [4:1.00] -; BTVER2-NEXT: cmpxchg16b (%rdi) # sched: [4:1.00] +; BTVER2-NEXT: cmpxchgb %dil, %sil # sched: [1:0.50] +; BTVER2-NEXT: cmpxchgb %dil, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_cmpxchg8b_cmpxchg16b: +; ZNVER1-LABEL: test_cmpxchg_8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: cmpxchg8b (%rdi) # sched: [1:0.50] -; ZNVER1-NEXT: cmpxchg16b (%rdi) # sched: [100:?] +; ZNVER1-NEXT: cmpxchgb %dil, %sil # sched: [1:0.25] +; ZNVER1-NEXT: cmpxchgb %dil, (%rdx) # sched: [8:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "cmpxchg8b $0 \0a\09 cmpxchg16b $0", "*m"(i8 *%a0) nounwind + tail call void asm "cmpxchgb $0, $1 \0a\09 cmpxchgb $0, $2", "r,r,*m"(i8 %a0, i8 %a1, i8 *%a2) nounwind ret void } - -define void @test_cpuid() optsize { -; GENERIC-LABEL: test_cpuid: +define void @test_cmpxchg_16(i16 %a0, i16 %a1, i16 *%a2) optsize { +; GENERIC-LABEL: test_cmpxchg_16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: cpuid # sched: [100:0.33] +; GENERIC-NEXT: cmpxchgw %di, %si # sched: [5:1.33] +; GENERIC-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_cpuid: +; ATOM-LABEL: test_cmpxchg_16: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: cpuid # sched: [121:60.50] +; ATOM-NEXT: cmpxchgw %di, %si # sched: [15:7.50] +; ATOM-NEXT: cmpxchgw %di, (%rdx) # sched: [14:7.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_cpuid: +; SLM-LABEL: test_cmpxchg_16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: cpuid # sched: [100:1.00] +; SLM-NEXT: cmpxchgw %di, %si # sched: [1:0.50] +; SLM-NEXT: cmpxchgw %di, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_cpuid: +; SANDY-LABEL: test_cmpxchg_16: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: cpuid # sched: [100:0.33] +; SANDY-NEXT: cmpxchgw %di, %si # sched: [5:1.33] +; SANDY-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_cpuid: +; HASWELL-LABEL: test_cmpxchg_16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: cpuid # sched: [18:2.00] +; HASWELL-NEXT: cmpxchgw %di, %si # sched: [5:1.25] +; HASWELL-NEXT: cmpxchgw %di, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_cpuid: +; BROADWELL-LABEL: test_cmpxchg_16: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: cpuid # sched: [18:2.00] +; BROADWELL-NEXT: cmpxchgw %di, %si # sched: [5:1.25] +; BROADWELL-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_cpuid: +; SKYLAKE-LABEL: test_cmpxchg_16: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: cpuid # sched: [18:2.00] +; SKYLAKE-NEXT: cmpxchgw %di, %si # sched: [5:1.25] +; SKYLAKE-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_cpuid: +; SKX-LABEL: test_cmpxchg_16: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: cpuid # sched: [18:2.00] +; SKX-NEXT: cmpxchgw %di, %si # sched: [5:1.25] +; SKX-NEXT: cmpxchgw %di, (%rdx) # sched: [8:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_cpuid: +; BTVER2-LABEL: test_cmpxchg_16: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: cpuid # sched: [100:0.17] +; BTVER2-NEXT: cmpxchgw %di, %si # sched: [1:0.50] +; BTVER2-NEXT: cmpxchgw %di, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_cpuid: +; ZNVER1-LABEL: test_cmpxchg_16: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: cpuid # sched: [100:?] +; ZNVER1-NEXT: cmpxchgw %di, %si # sched: [1:0.25] +; ZNVER1-NEXT: cmpxchgw %di, (%rdx) # sched: [8:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "cpuid", ""() nounwind + tail call void asm "cmpxchgw $0, $1 \0a\09 cmpxchgw $0, $2", "r,r,*m"(i16 %a0, i16 %a1, i16 *%a2) nounwind ret void } - -define void @test_dec8(i8 %a0, i8* %a1) optsize { -; GENERIC-LABEL: test_dec8: +define void @test_cmpxchg_32(i32 %a0, i32 %a1, i32 *%a2) optsize { +; GENERIC-LABEL: test_cmpxchg_32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: decb %dil # sched: [1:0.33] -; GENERIC-NEXT: decb (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: cmpxchgl %edi, %esi # sched: [5:1.33] +; GENERIC-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_dec8: +; ATOM-LABEL: test_cmpxchg_32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: decb %dil # sched: [1:0.50] -; ATOM-NEXT: decb (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpxchgl %edi, %esi # sched: [15:7.50] +; ATOM-NEXT: cmpxchgl %edi, (%rdx) # sched: [14:7.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_dec8: +; SLM-LABEL: test_cmpxchg_32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: decb %dil # sched: [1:0.50] -; SLM-NEXT: decb (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpxchgl %edi, %esi # sched: [1:0.50] +; SLM-NEXT: cmpxchgl %edi, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_dec8: +; SANDY-LABEL: test_cmpxchg_32: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: decb %dil # sched: [1:0.33] -; SANDY-NEXT: decb (%rsi) # sched: [7:1.00] +; SANDY-NEXT: cmpxchgl %edi, %esi # sched: [5:1.33] +; SANDY-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_dec8: +; HASWELL-LABEL: test_cmpxchg_32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: decb %dil # sched: [1:0.25] -; HASWELL-NEXT: decb (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: cmpxchgl %edi, %esi # sched: [5:1.25] +; HASWELL-NEXT: cmpxchgl %edi, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_dec8: +; BROADWELL-LABEL: test_cmpxchg_32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: decb %dil # sched: [1:0.25] -; BROADWELL-NEXT: decb (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: cmpxchgl %edi, %esi # sched: [5:1.25] +; BROADWELL-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_dec8: +; SKYLAKE-LABEL: test_cmpxchg_32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: decb %dil # sched: [1:0.25] -; SKYLAKE-NEXT: decb (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: cmpxchgl %edi, %esi # sched: [5:1.25] +; SKYLAKE-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_dec8: +; SKX-LABEL: test_cmpxchg_32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: decb %dil # sched: [1:0.25] -; SKX-NEXT: decb (%rsi) # sched: [6:1.00] +; SKX-NEXT: cmpxchgl %edi, %esi # sched: [5:1.25] +; SKX-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_dec8: +; BTVER2-LABEL: test_cmpxchg_32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: decb %dil # sched: [1:0.50] -; BTVER2-NEXT: decb (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpxchgl %edi, %esi # sched: [1:0.50] +; BTVER2-NEXT: cmpxchgl %edi, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_dec8: +; ZNVER1-LABEL: test_cmpxchg_32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: decb %dil # sched: [1:0.25] -; ZNVER1-NEXT: decb (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: cmpxchgl %edi, %esi # sched: [1:0.25] +; ZNVER1-NEXT: cmpxchgl %edi, (%rdx) # sched: [8:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "decb $0 \0A\09 decb $1", "r,*m"(i8 %a0, i8* %a1) nounwind + tail call void asm "cmpxchgl $0, $1 \0a\09 cmpxchgl $0, $2", "r,r,*m"(i32 %a0, i32 %a1, i32 *%a2) nounwind ret void } -define void @test_dec16(i16 %a0, i16* %a1) optsize { -; GENERIC-LABEL: test_dec16: +define void @test_cmpxchg_64(i64 %a0, i64 %a1, i64 *%a2) optsize { +; GENERIC-LABEL: test_cmpxchg_64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: decw %di # sched: [1:0.33] -; GENERIC-NEXT: decw (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.33] +; GENERIC-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_dec16: +; ATOM-LABEL: test_cmpxchg_64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: decw %di # sched: [1:0.50] -; ATOM-NEXT: decw (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpxchgq %rdi, %rsi # sched: [15:7.50] +; ATOM-NEXT: cmpxchgq %rdi, (%rdx) # sched: [14:7.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_dec16: +; SLM-LABEL: test_cmpxchg_64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: decw %di # sched: [1:0.50] -; SLM-NEXT: decw (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpxchgq %rdi, %rsi # sched: [1:0.50] +; SLM-NEXT: cmpxchgq %rdi, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_dec16: +; SANDY-LABEL: test_cmpxchg_64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: decw %di # sched: [1:0.33] -; SANDY-NEXT: decw (%rsi) # sched: [7:1.00] +; SANDY-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.33] +; SANDY-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_dec16: +; HASWELL-LABEL: test_cmpxchg_64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: decw %di # sched: [1:0.25] -; HASWELL-NEXT: decw (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.25] +; HASWELL-NEXT: cmpxchgq %rdi, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_dec16: +; BROADWELL-LABEL: test_cmpxchg_64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: decw %di # sched: [1:0.25] -; BROADWELL-NEXT: decw (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.25] +; BROADWELL-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_dec16: +; SKYLAKE-LABEL: test_cmpxchg_64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: decw %di # sched: [1:0.25] -; SKYLAKE-NEXT: decw (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.25] +; SKYLAKE-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_dec16: +; SKX-LABEL: test_cmpxchg_64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: decw %di # sched: [1:0.25] -; SKX-NEXT: decw (%rsi) # sched: [6:1.00] +; SKX-NEXT: cmpxchgq %rdi, %rsi # sched: [5:1.25] +; SKX-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_dec16: +; BTVER2-LABEL: test_cmpxchg_64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: decw %di # sched: [1:0.50] -; BTVER2-NEXT: decw (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpxchgq %rdi, %rsi # sched: [1:0.50] +; BTVER2-NEXT: cmpxchgq %rdi, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_dec16: +; ZNVER1-LABEL: test_cmpxchg_64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: decw %di # sched: [1:0.25] -; ZNVER1-NEXT: decw (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: cmpxchgq %rdi, %rsi # sched: [1:0.25] +; ZNVER1-NEXT: cmpxchgq %rdi, (%rdx) # sched: [8:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "decw $0 \0A\09 decw $1", "r,*m"(i16 %a0, i16* %a1) nounwind + tail call void asm "cmpxchgq $0, $1 \0a\09 cmpxchgq $0, $2", "r,r,*m"(i64 %a0, i64 %a1, i64 *%a2) nounwind ret void } -define void @test_dec32(i32 %a0, i32* %a1) optsize { -; GENERIC-LABEL: test_dec32: +define void @test_cmpxchg8b_cmpxchg16b(i8 *%a0) optsize { +; GENERIC-LABEL: test_cmpxchg8b_cmpxchg16b: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: decl %edi # sched: [1:0.33] -; GENERIC-NEXT: decl (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: cmpxchg8b (%rdi) # sched: [5:1.00] +; GENERIC-NEXT: cmpxchg16b (%rdi) # sched: [5:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_dec32: +; ATOM-LABEL: test_cmpxchg8b_cmpxchg16b: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: decl %edi # sched: [1:0.50] -; ATOM-NEXT: decl (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cmpxchg8b (%rdi) # sched: [18:9.00] +; ATOM-NEXT: cmpxchg16b (%rdi) # sched: [22:11.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_dec32: +; SLM-LABEL: test_cmpxchg8b_cmpxchg16b: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: decl %edi # sched: [1:0.50] -; SLM-NEXT: decl (%rsi) # sched: [4:2.00] +; SLM-NEXT: cmpxchg8b (%rdi) # sched: [4:2.00] +; SLM-NEXT: cmpxchg16b (%rdi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_dec32: +; SANDY-LABEL: test_cmpxchg8b_cmpxchg16b: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: decl %edi # sched: [1:0.33] -; SANDY-NEXT: decl (%rsi) # sched: [7:1.00] +; SANDY-NEXT: cmpxchg8b (%rdi) # sched: [5:1.00] +; SANDY-NEXT: cmpxchg16b (%rdi) # sched: [5:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_dec32: +; HASWELL-LABEL: test_cmpxchg8b_cmpxchg16b: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: decl %edi # sched: [1:0.25] -; HASWELL-NEXT: decl (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: cmpxchg8b (%rdi) # sched: [17:2.75] +; HASWELL-NEXT: cmpxchg16b (%rdi) # sched: [22:4.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_dec32: +; BROADWELL-LABEL: test_cmpxchg8b_cmpxchg16b: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: decl %edi # sched: [1:0.25] -; BROADWELL-NEXT: decl (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: cmpxchg8b (%rdi) # sched: [16:2.75] +; BROADWELL-NEXT: cmpxchg16b (%rdi) # sched: [21:4.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_dec32: +; SKYLAKE-LABEL: test_cmpxchg8b_cmpxchg16b: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: decl %edi # sched: [1:0.25] -; SKYLAKE-NEXT: decl (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: cmpxchg8b (%rdi) # sched: [16:2.75] +; SKYLAKE-NEXT: cmpxchg16b (%rdi) # sched: [23:4.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_dec32: +; SKX-LABEL: test_cmpxchg8b_cmpxchg16b: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: decl %edi # sched: [1:0.25] -; SKX-NEXT: decl (%rsi) # sched: [6:1.00] +; SKX-NEXT: cmpxchg8b (%rdi) # sched: [16:2.75] +; SKX-NEXT: cmpxchg16b (%rdi) # sched: [23:4.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_dec32: +; BTVER2-LABEL: test_cmpxchg8b_cmpxchg16b: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: decl %edi # sched: [1:0.50] -; BTVER2-NEXT: decl (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cmpxchg8b (%rdi) # sched: [4:1.00] +; BTVER2-NEXT: cmpxchg16b (%rdi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_dec32: +; ZNVER1-LABEL: test_cmpxchg8b_cmpxchg16b: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: decl %edi # sched: [1:0.25] -; ZNVER1-NEXT: decl (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: cmpxchg8b (%rdi) # sched: [1:0.50] +; ZNVER1-NEXT: cmpxchg16b (%rdi) # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "decl $0 \0A\09 decl $1", "r,*m"(i32 %a0, i32* %a1) nounwind + tail call void asm "cmpxchg8b $0 \0a\09 cmpxchg16b $0", "*m"(i8 *%a0) nounwind ret void } -define void @test_dec64(i64 %a0, i64* %a1) optsize { -; GENERIC-LABEL: test_dec64: + +define void @test_cpuid() optsize { +; GENERIC-LABEL: test_cpuid: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: decq %rdi # sched: [1:0.33] -; GENERIC-NEXT: decq (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: cpuid # sched: [100:0.33] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_dec64: +; ATOM-LABEL: test_cpuid: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: decq %rdi # sched: [1:0.50] -; ATOM-NEXT: decq (%rsi) # sched: [1:1.00] +; ATOM-NEXT: cpuid # sched: [121:60.50] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_dec64: +; SLM-LABEL: test_cpuid: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: decq %rdi # sched: [1:0.50] -; SLM-NEXT: decq (%rsi) # sched: [4:2.00] +; SLM-NEXT: cpuid # sched: [100:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_dec64: +; SANDY-LABEL: test_cpuid: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: decq %rdi # sched: [1:0.33] -; SANDY-NEXT: decq (%rsi) # sched: [7:1.00] +; SANDY-NEXT: cpuid # sched: [100:0.33] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_dec64: +; HASWELL-LABEL: test_cpuid: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: decq %rdi # sched: [1:0.25] -; HASWELL-NEXT: decq (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: cpuid # sched: [18:2.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_dec64: +; BROADWELL-LABEL: test_cpuid: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: decq %rdi # sched: [1:0.25] -; BROADWELL-NEXT: decq (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: cpuid # sched: [18:2.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_dec64: +; SKYLAKE-LABEL: test_cpuid: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: decq %rdi # sched: [1:0.25] -; SKYLAKE-NEXT: decq (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: cpuid # sched: [18:2.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_dec64: +; SKX-LABEL: test_cpuid: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: decq %rdi # sched: [1:0.25] -; SKX-NEXT: decq (%rsi) # sched: [6:1.00] +; SKX-NEXT: cpuid # sched: [18:2.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_dec64: +; BTVER2-LABEL: test_cpuid: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: decq %rdi # sched: [1:0.50] -; BTVER2-NEXT: decq (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: cpuid # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_dec64: +; ZNVER1-LABEL: test_cpuid: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: decq %rdi # sched: [1:0.25] -; ZNVER1-NEXT: decq (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: cpuid # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "decq $0 \0A\09 decq $1", "r,*m"(i64 %a0, i64* %a1) nounwind + tail call void asm "cpuid", ""() nounwind ret void } -define void @test_div(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { -; GENERIC-LABEL: test_div: +define void @test_dec8(i8 %a0, i8* %a1) optsize { +; GENERIC-LABEL: test_dec8: ; GENERIC: # %bb.0: -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: divb %dil # sched: [25:10.00] -; GENERIC-NEXT: divb (%r8) # sched: [29:10.00] -; GENERIC-NEXT: divw %si # sched: [25:10.00] -; GENERIC-NEXT: divw (%r9) # sched: [29:10.00] -; GENERIC-NEXT: divl %edx # sched: [25:10.00] -; GENERIC-NEXT: divl (%rax) # sched: [29:10.00] -; GENERIC-NEXT: divq %rcx # sched: [25:10.00] -; GENERIC-NEXT: divq (%r10) # sched: [29:10.00] +; GENERIC-NEXT: decb %dil # sched: [1:0.33] +; GENERIC-NEXT: decb (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_div: +; ATOM-LABEL: test_dec8: ; ATOM: # %bb.0: -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: divb %dil # sched: [50:25.00] -; ATOM-NEXT: divb (%r8) # sched: [68:34.00] -; ATOM-NEXT: divw %si # sched: [50:25.00] -; ATOM-NEXT: divw (%r9) # sched: [50:25.00] -; ATOM-NEXT: divl %edx # sched: [50:25.00] -; ATOM-NEXT: divl (%rax) # sched: [50:25.00] -; ATOM-NEXT: divq %rcx # sched: [130:65.00] -; ATOM-NEXT: divq (%r10) # sched: [130:65.00] +; ATOM-NEXT: decb %dil # sched: [1:0.50] +; ATOM-NEXT: decb (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_div: +; SLM-LABEL: test_dec8: ; SLM: # %bb.0: -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: divb %dil # sched: [25:25.00] -; SLM-NEXT: divb (%r8) # sched: [29:25.00] -; SLM-NEXT: divw %si # sched: [25:25.00] -; SLM-NEXT: divw (%r9) # sched: [29:25.00] -; SLM-NEXT: divl %edx # sched: [25:25.00] -; SLM-NEXT: divl (%rax) # sched: [29:25.00] -; SLM-NEXT: divq %rcx # sched: [25:25.00] -; SLM-NEXT: divq (%r10) # sched: [29:25.00] +; SLM-NEXT: decb %dil # sched: [1:0.50] +; SLM-NEXT: decb (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_div: +; SANDY-LABEL: test_dec8: ; SANDY: # %bb.0: -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: divb %dil # sched: [25:10.00] -; SANDY-NEXT: divb (%r8) # sched: [29:10.00] -; SANDY-NEXT: divw %si # sched: [25:10.00] -; SANDY-NEXT: divw (%r9) # sched: [29:10.00] -; SANDY-NEXT: divl %edx # sched: [25:10.00] -; SANDY-NEXT: divl (%rax) # sched: [29:10.00] -; SANDY-NEXT: divq %rcx # sched: [25:10.00] -; SANDY-NEXT: divq (%r10) # sched: [29:10.00] +; SANDY-NEXT: decb %dil # sched: [1:0.33] +; SANDY-NEXT: decb (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_div: +; HASWELL-LABEL: test_dec8: ; HASWELL: # %bb.0: -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: divb %dil # sched: [22:1.00] -; HASWELL-NEXT: divb (%r8) # sched: [29:10.00] -; HASWELL-NEXT: divw %si # sched: [98:8.00] -; HASWELL-NEXT: divw (%r9) # sched: [29:10.00] -; HASWELL-NEXT: divl %edx # sched: [98:8.00] -; HASWELL-NEXT: divl (%rax) # sched: [29:10.00] -; HASWELL-NEXT: divq %rcx # sched: [98:8.00] -; HASWELL-NEXT: divq (%r10) # sched: [29:10.00] +; HASWELL-NEXT: decb %dil # sched: [1:0.25] +; HASWELL-NEXT: decb (%rsi) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_div: +; BROADWELL-LABEL: test_dec8: ; BROADWELL: # %bb.0: -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: divb %dil # sched: [25:10.00] -; BROADWELL-NEXT: divb (%r8) # sched: [34:2.00] -; BROADWELL-NEXT: divw %si # sched: [80:8.00] -; BROADWELL-NEXT: divw (%r9) # sched: [34:2.00] -; BROADWELL-NEXT: divl %edx # sched: [80:8.00] -; BROADWELL-NEXT: divl (%rax) # sched: [34:2.00] -; BROADWELL-NEXT: divq %rcx # sched: [80:8.00] -; BROADWELL-NEXT: divq (%r10) # sched: [34:2.00] +; BROADWELL-NEXT: decb %dil # sched: [1:0.25] +; BROADWELL-NEXT: decb (%rsi) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_div: +; SKYLAKE-LABEL: test_dec8: ; SKYLAKE: # %bb.0: -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: divb %dil # sched: [25:10.00] -; SKYLAKE-NEXT: divb (%r8) # sched: [29:10.00] -; SKYLAKE-NEXT: divw %si # sched: [76:8.00] -; SKYLAKE-NEXT: divw (%r9) # sched: [29:10.00] -; SKYLAKE-NEXT: divl %edx # sched: [76:8.00] -; SKYLAKE-NEXT: divl (%rax) # sched: [29:10.00] -; SKYLAKE-NEXT: divq %rcx # sched: [76:8.00] -; SKYLAKE-NEXT: divq (%r10) # sched: [29:10.00] +; SKYLAKE-NEXT: decb %dil # sched: [1:0.25] +; SKYLAKE-NEXT: decb (%rsi) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_div: +; SKX-LABEL: test_dec8: ; SKX: # %bb.0: -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: divb %dil # sched: [25:10.00] -; SKX-NEXT: divb (%r8) # sched: [29:10.00] -; SKX-NEXT: divw %si # sched: [76:8.00] -; SKX-NEXT: divw (%r9) # sched: [29:10.00] -; SKX-NEXT: divl %edx # sched: [76:8.00] -; SKX-NEXT: divl (%rax) # sched: [29:10.00] -; SKX-NEXT: divq %rcx # sched: [76:8.00] -; SKX-NEXT: divq (%r10) # sched: [29:10.00] +; SKX-NEXT: decb %dil # sched: [1:0.25] +; SKX-NEXT: decb (%rsi) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_div: +; BTVER2-LABEL: test_dec8: ; BTVER2: # %bb.0: -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: divb %dil # sched: [25:25.00] -; BTVER2-NEXT: divb (%r8) # sched: [41:25.00] -; BTVER2-NEXT: divw %si # sched: [25:25.00] -; BTVER2-NEXT: divw (%r9) # sched: [41:25.00] -; BTVER2-NEXT: divl %edx # sched: [25:25.00] -; BTVER2-NEXT: divl (%rax) # sched: [41:25.00] -; BTVER2-NEXT: divq %rcx # sched: [25:25.00] -; BTVER2-NEXT: divq (%r10) # sched: [41:25.00] +; BTVER2-NEXT: decb %dil # sched: [1:0.50] +; BTVER2-NEXT: decb (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_div: +; ZNVER1-LABEL: test_dec8: ; ZNVER1: # %bb.0: -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: divb %dil # sched: [15:1.00] -; ZNVER1-NEXT: divb (%r8) # sched: [45:41.00] -; ZNVER1-NEXT: divw %si # sched: [17:1.00] -; ZNVER1-NEXT: divw (%r9) # sched: [45:41.00] -; ZNVER1-NEXT: divl %edx # sched: [25:1.00] -; ZNVER1-NEXT: divl (%rax) # sched: [45:41.00] -; ZNVER1-NEXT: divq %rcx # sched: [41:1.00] -; ZNVER1-NEXT: divq (%r10) # sched: [45:41.00] +; ZNVER1-NEXT: decb %dil # sched: [1:0.25] +; ZNVER1-NEXT: decb (%rsi) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "divb $0 \0A\09 divb $4 \0A\09 divw $1 \0A\09 divw $5 \0A\09 divl $2 \0A\09 divl $6 \0A\09 divq $3 \0A\09 divq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind + tail call void asm "decb $0 \0A\09 decb $1", "r,*m"(i8 %a0, i8* %a1) nounwind ret void } - -; TODO - test_enter - -define void @test_idiv(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { -; GENERIC-LABEL: test_idiv: +define void @test_dec16(i16 %a0, i16* %a1) optsize { +; GENERIC-LABEL: test_dec16: ; GENERIC: # %bb.0: -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: idivb %dil # sched: [25:10.00] -; GENERIC-NEXT: idivb (%r8) # sched: [29:10.00] -; GENERIC-NEXT: idivw %si # sched: [25:10.00] -; GENERIC-NEXT: idivw (%r9) # sched: [29:10.00] -; GENERIC-NEXT: idivl %edx # sched: [25:10.00] -; GENERIC-NEXT: idivl (%rax) # sched: [29:10.00] -; GENERIC-NEXT: idivq %rcx # sched: [25:10.00] -; GENERIC-NEXT: idivq (%r10) # sched: [29:10.00] +; GENERIC-NEXT: decw %di # sched: [1:0.33] +; GENERIC-NEXT: decw (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_idiv: +; ATOM-LABEL: test_dec16: ; ATOM: # %bb.0: -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: idivb %dil # sched: [62:31.00] -; ATOM-NEXT: idivb (%r8) # sched: [62:31.00] -; ATOM-NEXT: idivw %si # sched: [62:31.00] -; ATOM-NEXT: idivw (%r9) # sched: [62:31.00] -; ATOM-NEXT: idivl %edx # sched: [62:31.00] -; ATOM-NEXT: idivl (%rax) # sched: [62:31.00] -; ATOM-NEXT: idivq %rcx # sched: [130:65.00] -; ATOM-NEXT: idivq (%r10) # sched: [130:65.00] +; ATOM-NEXT: decw %di # sched: [1:0.50] +; ATOM-NEXT: decw (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_idiv: +; SLM-LABEL: test_dec16: ; SLM: # %bb.0: -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: idivb %dil # sched: [25:25.00] -; SLM-NEXT: idivb (%r8) # sched: [29:25.00] -; SLM-NEXT: idivw %si # sched: [25:25.00] -; SLM-NEXT: idivw (%r9) # sched: [29:25.00] -; SLM-NEXT: idivl %edx # sched: [25:25.00] -; SLM-NEXT: idivl (%rax) # sched: [29:25.00] -; SLM-NEXT: idivq %rcx # sched: [25:25.00] -; SLM-NEXT: idivq (%r10) # sched: [29:25.00] +; SLM-NEXT: decw %di # sched: [1:0.50] +; SLM-NEXT: decw (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_idiv: +; SANDY-LABEL: test_dec16: ; SANDY: # %bb.0: -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: idivb %dil # sched: [25:10.00] -; SANDY-NEXT: idivb (%r8) # sched: [29:10.00] -; SANDY-NEXT: idivw %si # sched: [25:10.00] -; SANDY-NEXT: idivw (%r9) # sched: [29:10.00] -; SANDY-NEXT: idivl %edx # sched: [25:10.00] -; SANDY-NEXT: idivl (%rax) # sched: [29:10.00] -; SANDY-NEXT: idivq %rcx # sched: [25:10.00] -; SANDY-NEXT: idivq (%r10) # sched: [29:10.00] +; SANDY-NEXT: decw %di # sched: [1:0.33] +; SANDY-NEXT: decw (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_idiv: +; HASWELL-LABEL: test_dec16: ; HASWELL: # %bb.0: -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: idivb %dil # sched: [23:1.00] -; HASWELL-NEXT: idivb (%r8) # sched: [29:10.00] -; HASWELL-NEXT: idivw %si # sched: [112:16.50] -; HASWELL-NEXT: idivw (%r9) # sched: [29:10.00] -; HASWELL-NEXT: idivl %edx # sched: [112:16.50] -; HASWELL-NEXT: idivl (%rax) # sched: [29:10.00] -; HASWELL-NEXT: idivq %rcx # sched: [112:16.50] -; HASWELL-NEXT: idivq (%r10) # sched: [29:10.00] +; HASWELL-NEXT: decw %di # sched: [1:0.25] +; HASWELL-NEXT: decw (%rsi) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_idiv: +; BROADWELL-LABEL: test_dec16: ; BROADWELL: # %bb.0: -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: idivb %dil # sched: [25:10.00] -; BROADWELL-NEXT: idivb (%r8) # sched: [35:2.00] -; BROADWELL-NEXT: idivw %si # sched: [25:10.00] -; BROADWELL-NEXT: idivw (%r9) # sched: [35:2.00] -; BROADWELL-NEXT: idivl %edx # sched: [25:10.00] -; BROADWELL-NEXT: idivl (%rax) # sched: [35:2.00] -; BROADWELL-NEXT: idivq %rcx # sched: [25:10.00] -; BROADWELL-NEXT: idivq (%r10) # sched: [35:2.00] +; BROADWELL-NEXT: decw %di # sched: [1:0.25] +; BROADWELL-NEXT: decw (%rsi) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_idiv: +; SKYLAKE-LABEL: test_dec16: ; SKYLAKE: # %bb.0: -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: idivb %dil # sched: [25:10.00] -; SKYLAKE-NEXT: idivb (%r8) # sched: [28:4.00] -; SKYLAKE-NEXT: idivw %si # sched: [102:16.50] -; SKYLAKE-NEXT: idivw (%r9) # sched: [28:4.00] -; SKYLAKE-NEXT: idivl %edx # sched: [102:16.50] -; SKYLAKE-NEXT: idivl (%rax) # sched: [28:4.00] -; SKYLAKE-NEXT: idivq %rcx # sched: [102:16.50] -; SKYLAKE-NEXT: idivq (%r10) # sched: [28:4.00] +; SKYLAKE-NEXT: decw %di # sched: [1:0.25] +; SKYLAKE-NEXT: decw (%rsi) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_idiv: +; SKX-LABEL: test_dec16: ; SKX: # %bb.0: -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: idivb %dil # sched: [25:10.00] -; SKX-NEXT: idivb (%r8) # sched: [28:4.00] -; SKX-NEXT: idivw %si # sched: [102:16.50] -; SKX-NEXT: idivw (%r9) # sched: [28:4.00] -; SKX-NEXT: idivl %edx # sched: [102:16.50] -; SKX-NEXT: idivl (%rax) # sched: [28:4.00] -; SKX-NEXT: idivq %rcx # sched: [102:16.50] -; SKX-NEXT: idivq (%r10) # sched: [28:4.00] +; SKX-NEXT: decw %di # sched: [1:0.25] +; SKX-NEXT: decw (%rsi) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_idiv: +; BTVER2-LABEL: test_dec16: ; BTVER2: # %bb.0: -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: idivb %dil # sched: [25:25.00] -; BTVER2-NEXT: idivb (%r8) # sched: [41:25.00] -; BTVER2-NEXT: idivw %si # sched: [25:25.00] -; BTVER2-NEXT: idivw (%r9) # sched: [41:25.00] -; BTVER2-NEXT: idivl %edx # sched: [25:25.00] -; BTVER2-NEXT: idivl (%rax) # sched: [41:25.00] -; BTVER2-NEXT: idivq %rcx # sched: [25:25.00] -; BTVER2-NEXT: idivq (%r10) # sched: [41:25.00] +; BTVER2-NEXT: decw %di # sched: [1:0.50] +; BTVER2-NEXT: decw (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_idiv: +; ZNVER1-LABEL: test_dec16: ; ZNVER1: # %bb.0: -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: idivb %dil # sched: [15:1.00] -; ZNVER1-NEXT: idivb (%r8) # sched: [45:41.00] -; ZNVER1-NEXT: idivw %si # sched: [17:1.00] -; ZNVER1-NEXT: idivw (%r9) # sched: [45:41.00] -; ZNVER1-NEXT: idivl %edx # sched: [25:1.00] -; ZNVER1-NEXT: idivl (%rax) # sched: [45:41.00] -; ZNVER1-NEXT: idivq %rcx # sched: [41:1.00] -; ZNVER1-NEXT: idivq (%r10) # sched: [45:41.00] +; ZNVER1-NEXT: decw %di # sched: [1:0.25] +; ZNVER1-NEXT: decw (%rsi) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "idivb $0 \0A\09 idivb $4 \0A\09 idivw $1 \0A\09 idivw $5 \0A\09 idivl $2 \0A\09 idivl $6 \0A\09 idivq $3 \0A\09 idivq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind + tail call void asm "decw $0 \0A\09 decw $1", "r,*m"(i16 %a0, i16* %a1) nounwind ret void } - -; TODO - test_imul - -define void @test_in() optsize { -; GENERIC-LABEL: test_in: +define void @test_dec32(i32 %a0, i32* %a1) optsize { +; GENERIC-LABEL: test_dec32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: inb $7, %al # sched: [100:0.33] -; GENERIC-NEXT: inw $7, %ax # sched: [100:0.33] -; GENERIC-NEXT: inl $7, %eax # sched: [100:0.33] -; GENERIC-NEXT: inb %dx, %al # sched: [100:0.33] -; GENERIC-NEXT: inw %dx, %ax # sched: [100:0.33] -; GENERIC-NEXT: inl %dx, %eax # sched: [100:0.33] +; GENERIC-NEXT: decl %edi # sched: [1:0.33] +; GENERIC-NEXT: decl (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_in: +; ATOM-LABEL: test_dec32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: inb $7, %al # sched: [92:46.00] -; ATOM-NEXT: inw $7, %ax # sched: [92:46.00] -; ATOM-NEXT: inl $7, %eax # sched: [92:46.00] -; ATOM-NEXT: inb %dx, %al # sched: [94:47.00] -; ATOM-NEXT: inw %dx, %ax # sched: [94:47.00] -; ATOM-NEXT: inl %dx, %eax # sched: [94:47.00] +; ATOM-NEXT: decl %edi # sched: [1:0.50] +; ATOM-NEXT: decl (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_in: +; SLM-LABEL: test_dec32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: inb $7, %al # sched: [100:1.00] -; SLM-NEXT: inw $7, %ax # sched: [100:1.00] -; SLM-NEXT: inl $7, %eax # sched: [100:1.00] -; SLM-NEXT: inb %dx, %al # sched: [100:1.00] -; SLM-NEXT: inw %dx, %ax # sched: [100:1.00] -; SLM-NEXT: inl %dx, %eax # sched: [100:1.00] +; SLM-NEXT: decl %edi # sched: [1:0.50] +; SLM-NEXT: decl (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_in: +; SANDY-LABEL: test_dec32: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: inb $7, %al # sched: [100:0.33] -; SANDY-NEXT: inw $7, %ax # sched: [100:0.33] -; SANDY-NEXT: inl $7, %eax # sched: [100:0.33] -; SANDY-NEXT: inb %dx, %al # sched: [100:0.33] -; SANDY-NEXT: inw %dx, %ax # sched: [100:0.33] -; SANDY-NEXT: inl %dx, %eax # sched: [100:0.33] +; SANDY-NEXT: decl %edi # sched: [1:0.33] +; SANDY-NEXT: decl (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_in: +; HASWELL-LABEL: test_dec32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: inb $7, %al # sched: [35:5.00] -; HASWELL-NEXT: inw $7, %ax # sched: [35:5.00] -; HASWELL-NEXT: inl $7, %eax # sched: [35:5.00] -; HASWELL-NEXT: inb %dx, %al # sched: [35:5.00] -; HASWELL-NEXT: inw %dx, %ax # sched: [35:5.00] -; HASWELL-NEXT: inl %dx, %eax # sched: [35:5.00] +; HASWELL-NEXT: decl %edi # sched: [1:0.25] +; HASWELL-NEXT: decl (%rsi) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_in: +; BROADWELL-LABEL: test_dec32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: inb $7, %al # sched: [34:5.00] -; BROADWELL-NEXT: inw $7, %ax # sched: [34:5.00] -; BROADWELL-NEXT: inl $7, %eax # sched: [34:5.00] -; BROADWELL-NEXT: inb %dx, %al # sched: [34:5.00] -; BROADWELL-NEXT: inw %dx, %ax # sched: [34:5.00] -; BROADWELL-NEXT: inl %dx, %eax # sched: [34:5.00] +; BROADWELL-NEXT: decl %edi # sched: [1:0.25] +; BROADWELL-NEXT: decl (%rsi) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_in: +; SKYLAKE-LABEL: test_dec32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: inb $7, %al # sched: [35:5.00] -; SKYLAKE-NEXT: inw $7, %ax # sched: [35:5.00] -; SKYLAKE-NEXT: inl $7, %eax # sched: [35:5.00] -; SKYLAKE-NEXT: inb %dx, %al # sched: [35:5.00] -; SKYLAKE-NEXT: inw %dx, %ax # sched: [35:5.00] -; SKYLAKE-NEXT: inl %dx, %eax # sched: [35:5.00] +; SKYLAKE-NEXT: decl %edi # sched: [1:0.25] +; SKYLAKE-NEXT: decl (%rsi) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_in: +; SKX-LABEL: test_dec32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: inb $7, %al # sched: [35:5.00] -; SKX-NEXT: inw $7, %ax # sched: [35:5.00] -; SKX-NEXT: inl $7, %eax # sched: [35:5.00] -; SKX-NEXT: inb %dx, %al # sched: [35:5.00] -; SKX-NEXT: inw %dx, %ax # sched: [35:5.00] -; SKX-NEXT: inl %dx, %eax # sched: [35:5.00] +; SKX-NEXT: decl %edi # sched: [1:0.25] +; SKX-NEXT: decl (%rsi) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_in: +; BTVER2-LABEL: test_dec32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: inb $7, %al # sched: [100:0.17] -; BTVER2-NEXT: inw $7, %ax # sched: [100:0.17] -; BTVER2-NEXT: inl $7, %eax # sched: [100:0.17] -; BTVER2-NEXT: inb %dx, %al # sched: [100:0.17] -; BTVER2-NEXT: inw %dx, %ax # sched: [100:0.17] -; BTVER2-NEXT: inl %dx, %eax # sched: [100:0.17] +; BTVER2-NEXT: decl %edi # sched: [1:0.50] +; BTVER2-NEXT: decl (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_in: +; ZNVER1-LABEL: test_dec32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: inb $7, %al # sched: [100:?] -; ZNVER1-NEXT: inw $7, %ax # sched: [100:?] -; ZNVER1-NEXT: inl $7, %eax # sched: [100:?] -; ZNVER1-NEXT: inb %dx, %al # sched: [100:?] -; ZNVER1-NEXT: inw %dx, %ax # sched: [100:?] -; ZNVER1-NEXT: inl %dx, %eax # sched: [100:?] +; ZNVER1-NEXT: decl %edi # sched: [1:0.25] +; ZNVER1-NEXT: decl (%rsi) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "inb $0, %AL \0A\09 inw $0, %AX \0A\09 inl $0, %EAX \0A\09 inb %DX, %AL \0A\09 inw %DX, %AX \0A\09 inl %DX, %EAX", "i"(i8 7) nounwind + tail call void asm "decl $0 \0A\09 decl $1", "r,*m"(i32 %a0, i32* %a1) nounwind ret void } - -define void @test_inc8(i8 %a0, i8* %a1) optsize { -; GENERIC-LABEL: test_inc8: +define void @test_dec64(i64 %a0, i64* %a1) optsize { +; GENERIC-LABEL: test_dec64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: incb %dil # sched: [1:0.33] -; GENERIC-NEXT: incb (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: decq %rdi # sched: [1:0.33] +; GENERIC-NEXT: decq (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_inc8: +; ATOM-LABEL: test_dec64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: incb %dil # sched: [1:0.50] -; ATOM-NEXT: incb (%rsi) # sched: [1:1.00] +; ATOM-NEXT: decq %rdi # sched: [1:0.50] +; ATOM-NEXT: decq (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_inc8: +; SLM-LABEL: test_dec64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: incb %dil # sched: [1:0.50] -; SLM-NEXT: incb (%rsi) # sched: [4:2.00] +; SLM-NEXT: decq %rdi # sched: [1:0.50] +; SLM-NEXT: decq (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_inc8: +; SANDY-LABEL: test_dec64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: incb %dil # sched: [1:0.33] -; SANDY-NEXT: incb (%rsi) # sched: [7:1.00] +; SANDY-NEXT: decq %rdi # sched: [1:0.33] +; SANDY-NEXT: decq (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_inc8: +; HASWELL-LABEL: test_dec64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: incb %dil # sched: [1:0.25] -; HASWELL-NEXT: incb (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: decq %rdi # sched: [1:0.25] +; HASWELL-NEXT: decq (%rsi) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_inc8: +; BROADWELL-LABEL: test_dec64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: incb %dil # sched: [1:0.25] -; BROADWELL-NEXT: incb (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: decq %rdi # sched: [1:0.25] +; BROADWELL-NEXT: decq (%rsi) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_inc8: +; SKYLAKE-LABEL: test_dec64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: incb %dil # sched: [1:0.25] -; SKYLAKE-NEXT: incb (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: decq %rdi # sched: [1:0.25] +; SKYLAKE-NEXT: decq (%rsi) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_inc8: +; SKX-LABEL: test_dec64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: incb %dil # sched: [1:0.25] -; SKX-NEXT: incb (%rsi) # sched: [6:1.00] +; SKX-NEXT: decq %rdi # sched: [1:0.25] +; SKX-NEXT: decq (%rsi) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_inc8: +; BTVER2-LABEL: test_dec64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: incb %dil # sched: [1:0.50] -; BTVER2-NEXT: incb (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: decq %rdi # sched: [1:0.50] +; BTVER2-NEXT: decq (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_inc8: +; ZNVER1-LABEL: test_dec64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: incb %dil # sched: [1:0.25] -; ZNVER1-NEXT: incb (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: decq %rdi # sched: [1:0.25] +; ZNVER1-NEXT: decq (%rsi) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "incb $0 \0A\09 incb $1", "r,*m"(i8 %a0, i8* %a1) nounwind + tail call void asm "decq $0 \0A\09 decq $1", "r,*m"(i64 %a0, i64* %a1) nounwind ret void } -define void @test_inc16(i16 %a0, i16* %a1) optsize { -; GENERIC-LABEL: test_inc16: + +define void @test_div(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { +; GENERIC-LABEL: test_div: ; GENERIC: # %bb.0: +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: incw %di # sched: [1:0.33] -; GENERIC-NEXT: incw (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: divb %dil # sched: [25:10.00] +; GENERIC-NEXT: divb (%r8) # sched: [29:10.00] +; GENERIC-NEXT: divw %si # sched: [25:10.00] +; GENERIC-NEXT: divw (%r9) # sched: [29:10.00] +; GENERIC-NEXT: divl %edx # sched: [25:10.00] +; GENERIC-NEXT: divl (%rax) # sched: [29:10.00] +; GENERIC-NEXT: divq %rcx # sched: [25:10.00] +; GENERIC-NEXT: divq (%r10) # sched: [29:10.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_inc16: +; ATOM-LABEL: test_div: ; ATOM: # %bb.0: +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: incw %di # sched: [1:0.50] -; ATOM-NEXT: incw (%rsi) # sched: [1:1.00] +; ATOM-NEXT: divb %dil # sched: [50:25.00] +; ATOM-NEXT: divb (%r8) # sched: [68:34.00] +; ATOM-NEXT: divw %si # sched: [50:25.00] +; ATOM-NEXT: divw (%r9) # sched: [50:25.00] +; ATOM-NEXT: divl %edx # sched: [50:25.00] +; ATOM-NEXT: divl (%rax) # sched: [50:25.00] +; ATOM-NEXT: divq %rcx # sched: [130:65.00] +; ATOM-NEXT: divq (%r10) # sched: [130:65.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_inc16: +; SLM-LABEL: test_div: ; SLM: # %bb.0: +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: incw %di # sched: [1:0.50] -; SLM-NEXT: incw (%rsi) # sched: [4:2.00] +; SLM-NEXT: divb %dil # sched: [25:25.00] +; SLM-NEXT: divb (%r8) # sched: [29:25.00] +; SLM-NEXT: divw %si # sched: [25:25.00] +; SLM-NEXT: divw (%r9) # sched: [29:25.00] +; SLM-NEXT: divl %edx # sched: [25:25.00] +; SLM-NEXT: divl (%rax) # sched: [29:25.00] +; SLM-NEXT: divq %rcx # sched: [25:25.00] +; SLM-NEXT: divq (%r10) # sched: [29:25.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_inc16: +; SANDY-LABEL: test_div: ; SANDY: # %bb.0: +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: incw %di # sched: [1:0.33] -; SANDY-NEXT: incw (%rsi) # sched: [7:1.00] +; SANDY-NEXT: divb %dil # sched: [25:10.00] +; SANDY-NEXT: divb (%r8) # sched: [29:10.00] +; SANDY-NEXT: divw %si # sched: [25:10.00] +; SANDY-NEXT: divw (%r9) # sched: [29:10.00] +; SANDY-NEXT: divl %edx # sched: [25:10.00] +; SANDY-NEXT: divl (%rax) # sched: [29:10.00] +; SANDY-NEXT: divq %rcx # sched: [25:10.00] +; SANDY-NEXT: divq (%r10) # sched: [29:10.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_inc16: +; HASWELL-LABEL: test_div: ; HASWELL: # %bb.0: +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: incw %di # sched: [1:0.25] -; HASWELL-NEXT: incw (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: divb %dil # sched: [22:1.00] +; HASWELL-NEXT: divb (%r8) # sched: [29:10.00] +; HASWELL-NEXT: divw %si # sched: [98:8.00] +; HASWELL-NEXT: divw (%r9) # sched: [29:10.00] +; HASWELL-NEXT: divl %edx # sched: [98:8.00] +; HASWELL-NEXT: divl (%rax) # sched: [29:10.00] +; HASWELL-NEXT: divq %rcx # sched: [98:8.00] +; HASWELL-NEXT: divq (%r10) # sched: [29:10.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_inc16: +; BROADWELL-LABEL: test_div: ; BROADWELL: # %bb.0: +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: incw %di # sched: [1:0.25] -; BROADWELL-NEXT: incw (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: divb %dil # sched: [25:10.00] +; BROADWELL-NEXT: divb (%r8) # sched: [34:2.00] +; BROADWELL-NEXT: divw %si # sched: [80:8.00] +; BROADWELL-NEXT: divw (%r9) # sched: [34:2.00] +; BROADWELL-NEXT: divl %edx # sched: [80:8.00] +; BROADWELL-NEXT: divl (%rax) # sched: [34:2.00] +; BROADWELL-NEXT: divq %rcx # sched: [80:8.00] +; BROADWELL-NEXT: divq (%r10) # sched: [34:2.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_inc16: +; SKYLAKE-LABEL: test_div: ; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: incw %di # sched: [1:0.25] -; SKYLAKE-NEXT: incw (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: divb %dil # sched: [25:10.00] +; SKYLAKE-NEXT: divb (%r8) # sched: [29:10.00] +; SKYLAKE-NEXT: divw %si # sched: [76:8.00] +; SKYLAKE-NEXT: divw (%r9) # sched: [29:10.00] +; SKYLAKE-NEXT: divl %edx # sched: [76:8.00] +; SKYLAKE-NEXT: divl (%rax) # sched: [29:10.00] +; SKYLAKE-NEXT: divq %rcx # sched: [76:8.00] +; SKYLAKE-NEXT: divq (%r10) # sched: [29:10.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_inc16: +; SKX-LABEL: test_div: ; SKX: # %bb.0: +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: incw %di # sched: [1:0.25] -; SKX-NEXT: incw (%rsi) # sched: [6:1.00] +; SKX-NEXT: divb %dil # sched: [25:10.00] +; SKX-NEXT: divb (%r8) # sched: [29:10.00] +; SKX-NEXT: divw %si # sched: [76:8.00] +; SKX-NEXT: divw (%r9) # sched: [29:10.00] +; SKX-NEXT: divl %edx # sched: [76:8.00] +; SKX-NEXT: divl (%rax) # sched: [29:10.00] +; SKX-NEXT: divq %rcx # sched: [76:8.00] +; SKX-NEXT: divq (%r10) # sched: [29:10.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_inc16: +; BTVER2-LABEL: test_div: ; BTVER2: # %bb.0: +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: incw %di # sched: [1:0.50] -; BTVER2-NEXT: incw (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: divb %dil # sched: [25:25.00] +; BTVER2-NEXT: divb (%r8) # sched: [41:25.00] +; BTVER2-NEXT: divw %si # sched: [25:25.00] +; BTVER2-NEXT: divw (%r9) # sched: [41:25.00] +; BTVER2-NEXT: divl %edx # sched: [25:25.00] +; BTVER2-NEXT: divl (%rax) # sched: [41:25.00] +; BTVER2-NEXT: divq %rcx # sched: [25:25.00] +; BTVER2-NEXT: divq (%r10) # sched: [41:25.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_inc16: +; ZNVER1-LABEL: test_div: ; ZNVER1: # %bb.0: +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: incw %di # sched: [1:0.25] -; ZNVER1-NEXT: incw (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: divb %dil # sched: [15:1.00] +; ZNVER1-NEXT: divb (%r8) # sched: [45:41.00] +; ZNVER1-NEXT: divw %si # sched: [17:1.00] +; ZNVER1-NEXT: divw (%r9) # sched: [45:41.00] +; ZNVER1-NEXT: divl %edx # sched: [25:1.00] +; ZNVER1-NEXT: divl (%rax) # sched: [45:41.00] +; ZNVER1-NEXT: divq %rcx # sched: [41:1.00] +; ZNVER1-NEXT: divq (%r10) # sched: [45:41.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "incw $0 \0A\09 incw $1", "r,*m"(i16 %a0, i16* %a1) nounwind + tail call void asm "divb $0 \0A\09 divb $4 \0A\09 divw $1 \0A\09 divw $5 \0A\09 divl $2 \0A\09 divl $6 \0A\09 divq $3 \0A\09 divq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind ret void } -define void @test_inc32(i32 %a0, i32* %a1) optsize { -; GENERIC-LABEL: test_inc32: + +; TODO - test_enter + +define void @test_idiv(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { +; GENERIC-LABEL: test_idiv: ; GENERIC: # %bb.0: +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: incl %edi # sched: [1:0.33] -; GENERIC-NEXT: incl (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: idivb %dil # sched: [25:10.00] +; GENERIC-NEXT: idivb (%r8) # sched: [29:10.00] +; GENERIC-NEXT: idivw %si # sched: [25:10.00] +; GENERIC-NEXT: idivw (%r9) # sched: [29:10.00] +; GENERIC-NEXT: idivl %edx # sched: [25:10.00] +; GENERIC-NEXT: idivl (%rax) # sched: [29:10.00] +; GENERIC-NEXT: idivq %rcx # sched: [25:10.00] +; GENERIC-NEXT: idivq (%r10) # sched: [29:10.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_inc32: +; ATOM-LABEL: test_idiv: ; ATOM: # %bb.0: +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: incl %edi # sched: [1:0.50] -; ATOM-NEXT: incl (%rsi) # sched: [1:1.00] +; ATOM-NEXT: idivb %dil # sched: [62:31.00] +; ATOM-NEXT: idivb (%r8) # sched: [62:31.00] +; ATOM-NEXT: idivw %si # sched: [62:31.00] +; ATOM-NEXT: idivw (%r9) # sched: [62:31.00] +; ATOM-NEXT: idivl %edx # sched: [62:31.00] +; ATOM-NEXT: idivl (%rax) # sched: [62:31.00] +; ATOM-NEXT: idivq %rcx # sched: [130:65.00] +; ATOM-NEXT: idivq (%r10) # sched: [130:65.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_inc32: +; SLM-LABEL: test_idiv: ; SLM: # %bb.0: +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: incl %edi # sched: [1:0.50] -; SLM-NEXT: incl (%rsi) # sched: [4:2.00] +; SLM-NEXT: idivb %dil # sched: [25:25.00] +; SLM-NEXT: idivb (%r8) # sched: [29:25.00] +; SLM-NEXT: idivw %si # sched: [25:25.00] +; SLM-NEXT: idivw (%r9) # sched: [29:25.00] +; SLM-NEXT: idivl %edx # sched: [25:25.00] +; SLM-NEXT: idivl (%rax) # sched: [29:25.00] +; SLM-NEXT: idivq %rcx # sched: [25:25.00] +; SLM-NEXT: idivq (%r10) # sched: [29:25.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_inc32: +; SANDY-LABEL: test_idiv: ; SANDY: # %bb.0: +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: incl %edi # sched: [1:0.33] -; SANDY-NEXT: incl (%rsi) # sched: [7:1.00] +; SANDY-NEXT: idivb %dil # sched: [25:10.00] +; SANDY-NEXT: idivb (%r8) # sched: [29:10.00] +; SANDY-NEXT: idivw %si # sched: [25:10.00] +; SANDY-NEXT: idivw (%r9) # sched: [29:10.00] +; SANDY-NEXT: idivl %edx # sched: [25:10.00] +; SANDY-NEXT: idivl (%rax) # sched: [29:10.00] +; SANDY-NEXT: idivq %rcx # sched: [25:10.00] +; SANDY-NEXT: idivq (%r10) # sched: [29:10.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_inc32: +; HASWELL-LABEL: test_idiv: ; HASWELL: # %bb.0: +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: incl %edi # sched: [1:0.25] -; HASWELL-NEXT: incl (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: idivb %dil # sched: [23:1.00] +; HASWELL-NEXT: idivb (%r8) # sched: [29:10.00] +; HASWELL-NEXT: idivw %si # sched: [112:16.50] +; HASWELL-NEXT: idivw (%r9) # sched: [29:10.00] +; HASWELL-NEXT: idivl %edx # sched: [112:16.50] +; HASWELL-NEXT: idivl (%rax) # sched: [29:10.00] +; HASWELL-NEXT: idivq %rcx # sched: [112:16.50] +; HASWELL-NEXT: idivq (%r10) # sched: [29:10.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_inc32: +; BROADWELL-LABEL: test_idiv: ; BROADWELL: # %bb.0: +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: incl %edi # sched: [1:0.25] -; BROADWELL-NEXT: incl (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: idivb %dil # sched: [25:10.00] +; BROADWELL-NEXT: idivb (%r8) # sched: [35:2.00] +; BROADWELL-NEXT: idivw %si # sched: [25:10.00] +; BROADWELL-NEXT: idivw (%r9) # sched: [35:2.00] +; BROADWELL-NEXT: idivl %edx # sched: [25:10.00] +; BROADWELL-NEXT: idivl (%rax) # sched: [35:2.00] +; BROADWELL-NEXT: idivq %rcx # sched: [25:10.00] +; BROADWELL-NEXT: idivq (%r10) # sched: [35:2.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_inc32: +; SKYLAKE-LABEL: test_idiv: ; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: incl %edi # sched: [1:0.25] -; SKYLAKE-NEXT: incl (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: idivb %dil # sched: [25:10.00] +; SKYLAKE-NEXT: idivb (%r8) # sched: [28:4.00] +; SKYLAKE-NEXT: idivw %si # sched: [102:16.50] +; SKYLAKE-NEXT: idivw (%r9) # sched: [28:4.00] +; SKYLAKE-NEXT: idivl %edx # sched: [102:16.50] +; SKYLAKE-NEXT: idivl (%rax) # sched: [28:4.00] +; SKYLAKE-NEXT: idivq %rcx # sched: [102:16.50] +; SKYLAKE-NEXT: idivq (%r10) # sched: [28:4.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_inc32: +; SKX-LABEL: test_idiv: ; SKX: # %bb.0: +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: incl %edi # sched: [1:0.25] -; SKX-NEXT: incl (%rsi) # sched: [6:1.00] +; SKX-NEXT: idivb %dil # sched: [25:10.00] +; SKX-NEXT: idivb (%r8) # sched: [28:4.00] +; SKX-NEXT: idivw %si # sched: [102:16.50] +; SKX-NEXT: idivw (%r9) # sched: [28:4.00] +; SKX-NEXT: idivl %edx # sched: [102:16.50] +; SKX-NEXT: idivl (%rax) # sched: [28:4.00] +; SKX-NEXT: idivq %rcx # sched: [102:16.50] +; SKX-NEXT: idivq (%r10) # sched: [28:4.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_inc32: +; BTVER2-LABEL: test_idiv: ; BTVER2: # %bb.0: +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: incl %edi # sched: [1:0.50] -; BTVER2-NEXT: incl (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: idivb %dil # sched: [25:25.00] +; BTVER2-NEXT: idivb (%r8) # sched: [41:25.00] +; BTVER2-NEXT: idivw %si # sched: [25:25.00] +; BTVER2-NEXT: idivw (%r9) # sched: [41:25.00] +; BTVER2-NEXT: idivl %edx # sched: [25:25.00] +; BTVER2-NEXT: idivl (%rax) # sched: [41:25.00] +; BTVER2-NEXT: idivq %rcx # sched: [25:25.00] +; BTVER2-NEXT: idivq (%r10) # sched: [41:25.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_inc32: +; ZNVER1-LABEL: test_idiv: ; ZNVER1: # %bb.0: +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: incl %edi # sched: [1:0.25] -; ZNVER1-NEXT: incl (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: idivb %dil # sched: [15:1.00] +; ZNVER1-NEXT: idivb (%r8) # sched: [45:41.00] +; ZNVER1-NEXT: idivw %si # sched: [17:1.00] +; ZNVER1-NEXT: idivw (%r9) # sched: [45:41.00] +; ZNVER1-NEXT: idivl %edx # sched: [25:1.00] +; ZNVER1-NEXT: idivl (%rax) # sched: [45:41.00] +; ZNVER1-NEXT: idivq %rcx # sched: [41:1.00] +; ZNVER1-NEXT: idivq (%r10) # sched: [45:41.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "incl $0 \0A\09 incl $1", "r,*m"(i32 %a0, i32* %a1) nounwind + tail call void asm "idivb $0 \0A\09 idivb $4 \0A\09 idivw $1 \0A\09 idivw $5 \0A\09 idivl $2 \0A\09 idivl $6 \0A\09 idivq $3 \0A\09 idivq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind ret void } -define void @test_inc64(i64 %a0, i64* %a1) optsize { -; GENERIC-LABEL: test_inc64: + +; TODO - test_imul + +define void @test_in() optsize { +; GENERIC-LABEL: test_in: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: incq %rdi # sched: [1:0.33] -; GENERIC-NEXT: incq (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: inb $7, %al # sched: [100:0.33] +; GENERIC-NEXT: inw $7, %ax # sched: [100:0.33] +; GENERIC-NEXT: inl $7, %eax # sched: [100:0.33] +; GENERIC-NEXT: inb %dx, %al # sched: [100:0.33] +; GENERIC-NEXT: inw %dx, %ax # sched: [100:0.33] +; GENERIC-NEXT: inl %dx, %eax # sched: [100:0.33] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_inc64: +; ATOM-LABEL: test_in: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: incq %rdi # sched: [1:0.50] -; ATOM-NEXT: incq (%rsi) # sched: [1:1.00] +; ATOM-NEXT: inb $7, %al # sched: [92:46.00] +; ATOM-NEXT: inw $7, %ax # sched: [92:46.00] +; ATOM-NEXT: inl $7, %eax # sched: [92:46.00] +; ATOM-NEXT: inb %dx, %al # sched: [94:47.00] +; ATOM-NEXT: inw %dx, %ax # sched: [94:47.00] +; ATOM-NEXT: inl %dx, %eax # sched: [94:47.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_inc64: +; SLM-LABEL: test_in: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: incq %rdi # sched: [1:0.50] -; SLM-NEXT: incq (%rsi) # sched: [4:2.00] +; SLM-NEXT: inb $7, %al # sched: [100:1.00] +; SLM-NEXT: inw $7, %ax # sched: [100:1.00] +; SLM-NEXT: inl $7, %eax # sched: [100:1.00] +; SLM-NEXT: inb %dx, %al # sched: [100:1.00] +; SLM-NEXT: inw %dx, %ax # sched: [100:1.00] +; SLM-NEXT: inl %dx, %eax # sched: [100:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_inc64: +; SANDY-LABEL: test_in: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: incq %rdi # sched: [1:0.33] -; SANDY-NEXT: incq (%rsi) # sched: [7:1.00] +; SANDY-NEXT: inb $7, %al # sched: [100:0.33] +; SANDY-NEXT: inw $7, %ax # sched: [100:0.33] +; SANDY-NEXT: inl $7, %eax # sched: [100:0.33] +; SANDY-NEXT: inb %dx, %al # sched: [100:0.33] +; SANDY-NEXT: inw %dx, %ax # sched: [100:0.33] +; SANDY-NEXT: inl %dx, %eax # sched: [100:0.33] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_inc64: +; HASWELL-LABEL: test_in: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: incq %rdi # sched: [1:0.25] -; HASWELL-NEXT: incq (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: inb $7, %al # sched: [35:5.00] +; HASWELL-NEXT: inw $7, %ax # sched: [35:5.00] +; HASWELL-NEXT: inl $7, %eax # sched: [35:5.00] +; HASWELL-NEXT: inb %dx, %al # sched: [35:5.00] +; HASWELL-NEXT: inw %dx, %ax # sched: [35:5.00] +; HASWELL-NEXT: inl %dx, %eax # sched: [35:5.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_inc64: +; BROADWELL-LABEL: test_in: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: incq %rdi # sched: [1:0.25] -; BROADWELL-NEXT: incq (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: inb $7, %al # sched: [34:5.00] +; BROADWELL-NEXT: inw $7, %ax # sched: [34:5.00] +; BROADWELL-NEXT: inl $7, %eax # sched: [34:5.00] +; BROADWELL-NEXT: inb %dx, %al # sched: [34:5.00] +; BROADWELL-NEXT: inw %dx, %ax # sched: [34:5.00] +; BROADWELL-NEXT: inl %dx, %eax # sched: [34:5.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_inc64: +; SKYLAKE-LABEL: test_in: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: incq %rdi # sched: [1:0.25] -; SKYLAKE-NEXT: incq (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: inb $7, %al # sched: [35:5.00] +; SKYLAKE-NEXT: inw $7, %ax # sched: [35:5.00] +; SKYLAKE-NEXT: inl $7, %eax # sched: [35:5.00] +; SKYLAKE-NEXT: inb %dx, %al # sched: [35:5.00] +; SKYLAKE-NEXT: inw %dx, %ax # sched: [35:5.00] +; SKYLAKE-NEXT: inl %dx, %eax # sched: [35:5.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_inc64: +; SKX-LABEL: test_in: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: incq %rdi # sched: [1:0.25] -; SKX-NEXT: incq (%rsi) # sched: [6:1.00] +; SKX-NEXT: inb $7, %al # sched: [35:5.00] +; SKX-NEXT: inw $7, %ax # sched: [35:5.00] +; SKX-NEXT: inl $7, %eax # sched: [35:5.00] +; SKX-NEXT: inb %dx, %al # sched: [35:5.00] +; SKX-NEXT: inw %dx, %ax # sched: [35:5.00] +; SKX-NEXT: inl %dx, %eax # sched: [35:5.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_inc64: +; BTVER2-LABEL: test_in: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: incq %rdi # sched: [1:0.50] -; BTVER2-NEXT: incq (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: inb $7, %al # sched: [100:0.17] +; BTVER2-NEXT: inw $7, %ax # sched: [100:0.17] +; BTVER2-NEXT: inl $7, %eax # sched: [100:0.17] +; BTVER2-NEXT: inb %dx, %al # sched: [100:0.17] +; BTVER2-NEXT: inw %dx, %ax # sched: [100:0.17] +; BTVER2-NEXT: inl %dx, %eax # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_inc64: +; ZNVER1-LABEL: test_in: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: incq %rdi # sched: [1:0.25] -; ZNVER1-NEXT: incq (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: inb $7, %al # sched: [100:?] +; ZNVER1-NEXT: inw $7, %ax # sched: [100:?] +; ZNVER1-NEXT: inl $7, %eax # sched: [100:?] +; ZNVER1-NEXT: inb %dx, %al # sched: [100:?] +; ZNVER1-NEXT: inw %dx, %ax # sched: [100:?] +; ZNVER1-NEXT: inl %dx, %eax # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "incq $0 \0A\09 incq $1", "r,*m"(i64 %a0, i64* %a1) nounwind + tail call void asm "inb $0, %AL \0A\09 inw $0, %AX \0A\09 inl $0, %EAX \0A\09 inb %DX, %AL \0A\09 inw %DX, %AX \0A\09 inl %DX, %EAX", "i"(i8 7) nounwind ret void } -define void @test_ins() optsize { -; GENERIC-LABEL: test_ins: +define void @test_inc8(i8 %a0, i8* %a1) optsize { +; GENERIC-LABEL: test_inc8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: insb %dx, %es:(%rdi) # sched: [100:0.33] -; GENERIC-NEXT: insw %dx, %es:(%rdi) # sched: [100:0.33] -; GENERIC-NEXT: insl %dx, %es:(%rdi) # sched: [100:0.33] +; GENERIC-NEXT: incb %dil # sched: [1:0.33] +; GENERIC-NEXT: incb (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_ins: +; ATOM-LABEL: test_inc8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: insb %dx, %es:(%rdi) # sched: [59:29.50] -; ATOM-NEXT: insw %dx, %es:(%rdi) # sched: [59:29.50] -; ATOM-NEXT: insl %dx, %es:(%rdi) # sched: [59:29.50] +; ATOM-NEXT: incb %dil # sched: [1:0.50] +; ATOM-NEXT: incb (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_ins: +; SLM-LABEL: test_inc8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: insb %dx, %es:(%rdi) # sched: [100:1.00] -; SLM-NEXT: insw %dx, %es:(%rdi) # sched: [100:1.00] -; SLM-NEXT: insl %dx, %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: incb %dil # sched: [1:0.50] +; SLM-NEXT: incb (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_ins: +; SANDY-LABEL: test_inc8: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: insb %dx, %es:(%rdi) # sched: [100:0.33] -; SANDY-NEXT: insw %dx, %es:(%rdi) # sched: [100:0.33] -; SANDY-NEXT: insl %dx, %es:(%rdi) # sched: [100:0.33] +; SANDY-NEXT: incb %dil # sched: [1:0.33] +; SANDY-NEXT: incb (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_ins: +; HASWELL-LABEL: test_inc8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: insb %dx, %es:(%rdi) # sched: [21:1.25] -; HASWELL-NEXT: insw %dx, %es:(%rdi) # sched: [21:1.25] -; HASWELL-NEXT: insl %dx, %es:(%rdi) # sched: [21:1.25] +; HASWELL-NEXT: incb %dil # sched: [1:0.25] +; HASWELL-NEXT: incb (%rsi) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_ins: +; BROADWELL-LABEL: test_inc8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: insb %dx, %es:(%rdi) # sched: [20:1.25] -; BROADWELL-NEXT: insw %dx, %es:(%rdi) # sched: [20:1.25] -; BROADWELL-NEXT: insl %dx, %es:(%rdi) # sched: [20:1.25] +; BROADWELL-NEXT: incb %dil # sched: [1:0.25] +; BROADWELL-NEXT: incb (%rsi) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_ins: +; SKYLAKE-LABEL: test_inc8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: insb %dx, %es:(%rdi) # sched: [20:1.25] -; SKYLAKE-NEXT: insw %dx, %es:(%rdi) # sched: [20:1.25] -; SKYLAKE-NEXT: insl %dx, %es:(%rdi) # sched: [20:1.25] +; SKYLAKE-NEXT: incb %dil # sched: [1:0.25] +; SKYLAKE-NEXT: incb (%rsi) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_ins: +; SKX-LABEL: test_inc8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: insb %dx, %es:(%rdi) # sched: [20:1.25] -; SKX-NEXT: insw %dx, %es:(%rdi) # sched: [20:1.25] -; SKX-NEXT: insl %dx, %es:(%rdi) # sched: [20:1.25] +; SKX-NEXT: incb %dil # sched: [1:0.25] +; SKX-NEXT: incb (%rsi) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_ins: +; BTVER2-LABEL: test_inc8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: insb %dx, %es:(%rdi) # sched: [100:0.17] -; BTVER2-NEXT: insw %dx, %es:(%rdi) # sched: [100:0.17] -; BTVER2-NEXT: insl %dx, %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: incb %dil # sched: [1:0.50] +; BTVER2-NEXT: incb (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_ins: +; ZNVER1-LABEL: test_inc8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: insb %dx, %es:(%rdi) # sched: [100:?] -; ZNVER1-NEXT: insw %dx, %es:(%rdi) # sched: [100:?] -; ZNVER1-NEXT: insl %dx, %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: incb %dil # sched: [1:0.25] +; ZNVER1-NEXT: incb (%rsi) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "insb \0A\09 insw \0A\09 insl", ""() + tail call void asm "incb $0 \0A\09 incb $1", "r,*m"(i8 %a0, i8* %a1) nounwind ret void } - -define void @test_int() optsize { -; GENERIC-LABEL: test_int: +define void @test_inc16(i16 %a0, i16* %a1) optsize { +; GENERIC-LABEL: test_inc16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: int $7 # sched: [100:0.33] +; GENERIC-NEXT: incw %di # sched: [1:0.33] +; GENERIC-NEXT: incw (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_int: +; ATOM-LABEL: test_inc16: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: int $7 # sched: [127:63.50] +; ATOM-NEXT: incw %di # sched: [1:0.50] +; ATOM-NEXT: incw (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_int: +; SLM-LABEL: test_inc16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: int $7 # sched: [100:1.00] +; SLM-NEXT: incw %di # sched: [1:0.50] +; SLM-NEXT: incw (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_int: +; SANDY-LABEL: test_inc16: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: int $7 # sched: [100:0.33] +; SANDY-NEXT: incw %di # sched: [1:0.33] +; SANDY-NEXT: incw (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_int: +; HASWELL-LABEL: test_inc16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: int $7 # sched: [100:0.25] +; HASWELL-NEXT: incw %di # sched: [1:0.25] +; HASWELL-NEXT: incw (%rsi) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_int: +; BROADWELL-LABEL: test_inc16: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: int $7 # sched: [100:0.25] +; BROADWELL-NEXT: incw %di # sched: [1:0.25] +; BROADWELL-NEXT: incw (%rsi) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_int: +; SKYLAKE-LABEL: test_inc16: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: int $7 # sched: [100:0.25] +; SKYLAKE-NEXT: incw %di # sched: [1:0.25] +; SKYLAKE-NEXT: incw (%rsi) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_int: +; SKX-LABEL: test_inc16: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: int $7 # sched: [100:0.25] +; SKX-NEXT: incw %di # sched: [1:0.25] +; SKX-NEXT: incw (%rsi) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_int: +; BTVER2-LABEL: test_inc16: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: int $7 # sched: [100:0.17] +; BTVER2-NEXT: incw %di # sched: [1:0.50] +; BTVER2-NEXT: incw (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_int: +; ZNVER1-LABEL: test_inc16: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: int $7 # sched: [100:?] +; ZNVER1-NEXT: incw %di # sched: [1:0.25] +; ZNVER1-NEXT: incw (%rsi) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "int $0", "i"(i8 7) + tail call void asm "incw $0 \0A\09 incw $1", "r,*m"(i16 %a0, i16* %a1) nounwind ret void } - -define void @test_invlpg_invlpga(i8 *%a0) optsize { -; GENERIC-LABEL: test_invlpg_invlpga: +define void @test_inc32(i32 %a0, i32* %a1) optsize { +; GENERIC-LABEL: test_inc32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: invlpg (%rdi) # sched: [100:0.33] -; GENERIC-NEXT: invlpga %ecx, %rax # sched: [100:0.33] +; GENERIC-NEXT: incl %edi # sched: [1:0.33] +; GENERIC-NEXT: incl (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_invlpg_invlpga: +; ATOM-LABEL: test_inc32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: invlpg (%rdi) # sched: [71:35.50] -; ATOM-NEXT: invlpga %ecx, %rax # sched: [71:35.50] +; ATOM-NEXT: incl %edi # sched: [1:0.50] +; ATOM-NEXT: incl (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_invlpg_invlpga: +; SLM-LABEL: test_inc32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: invlpg (%rdi) # sched: [100:1.00] -; SLM-NEXT: invlpga %ecx, %rax # sched: [100:1.00] +; SLM-NEXT: incl %edi # sched: [1:0.50] +; SLM-NEXT: incl (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_invlpg_invlpga: +; SANDY-LABEL: test_inc32: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: invlpg (%rdi) # sched: [100:0.33] -; SANDY-NEXT: invlpga %ecx, %rax # sched: [100:0.33] +; SANDY-NEXT: incl %edi # sched: [1:0.33] +; SANDY-NEXT: incl (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_invlpg_invlpga: +; HASWELL-LABEL: test_inc32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: invlpg (%rdi) # sched: [100:0.25] -; HASWELL-NEXT: invlpga %ecx, %rax # sched: [100:0.25] +; HASWELL-NEXT: incl %edi # sched: [1:0.25] +; HASWELL-NEXT: incl (%rsi) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_invlpg_invlpga: +; BROADWELL-LABEL: test_inc32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: invlpg (%rdi) # sched: [100:0.25] -; BROADWELL-NEXT: invlpga %ecx, %rax # sched: [100:0.25] +; BROADWELL-NEXT: incl %edi # sched: [1:0.25] +; BROADWELL-NEXT: incl (%rsi) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_invlpg_invlpga: +; SKYLAKE-LABEL: test_inc32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: invlpg (%rdi) # sched: [100:0.25] -; SKYLAKE-NEXT: invlpga %ecx, %rax # sched: [100:0.25] +; SKYLAKE-NEXT: incl %edi # sched: [1:0.25] +; SKYLAKE-NEXT: incl (%rsi) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_invlpg_invlpga: +; SKX-LABEL: test_inc32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: invlpg (%rdi) # sched: [100:0.25] -; SKX-NEXT: invlpga %ecx, %rax # sched: [100:0.25] +; SKX-NEXT: incl %edi # sched: [1:0.25] +; SKX-NEXT: incl (%rsi) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_invlpg_invlpga: +; BTVER2-LABEL: test_inc32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: invlpg (%rdi) # sched: [100:0.17] -; BTVER2-NEXT: invlpga %ecx, %rax # sched: [100:0.17] +; BTVER2-NEXT: incl %edi # sched: [1:0.50] +; BTVER2-NEXT: incl (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_invlpg_invlpga: +; ZNVER1-LABEL: test_inc32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: invlpg (%rdi) # sched: [100:?] -; ZNVER1-NEXT: invlpga %ecx, %rax # sched: [100:?] +; ZNVER1-NEXT: incl %edi # sched: [1:0.25] +; ZNVER1-NEXT: incl (%rsi) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm sideeffect "invlpg $0 \0A\09 invlpga %ecx, %rax", "*m"(i8 *%a0) nounwind + tail call void asm "incl $0 \0A\09 incl $1", "r,*m"(i32 %a0, i32* %a1) nounwind ret void } - -; TODO - test_jcc -; TODO - test_jcxz -; TODO - test_jwcxz -; TODO - test_jrcxz - -; TODO - test_jmp - -define void @test_lahf_sahf() optsize { -; GENERIC-LABEL: test_lahf_sahf: +define void @test_inc64(i64 %a0, i64* %a1) optsize { +; GENERIC-LABEL: test_inc64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: lahf # sched: [1:0.50] -; GENERIC-NEXT: sahf # sched: [1:0.50] +; GENERIC-NEXT: incq %rdi # sched: [1:0.33] +; GENERIC-NEXT: incq (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_lahf_sahf: +; ATOM-LABEL: test_inc64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: lahf # sched: [1:0.50] -; ATOM-NEXT: sahf # sched: [1:0.50] +; ATOM-NEXT: incq %rdi # sched: [1:0.50] +; ATOM-NEXT: incq (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_lahf_sahf: +; SLM-LABEL: test_inc64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: lahf # sched: [1:0.50] -; SLM-NEXT: sahf # sched: [1:0.50] +; SLM-NEXT: incq %rdi # sched: [1:0.50] +; SLM-NEXT: incq (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_lahf_sahf: +; SANDY-LABEL: test_inc64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: lahf # sched: [1:0.50] -; SANDY-NEXT: sahf # sched: [1:0.50] +; SANDY-NEXT: incq %rdi # sched: [1:0.33] +; SANDY-NEXT: incq (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_lahf_sahf: +; HASWELL-LABEL: test_inc64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: lahf # sched: [1:0.25] -; HASWELL-NEXT: sahf # sched: [1:0.25] +; HASWELL-NEXT: incq %rdi # sched: [1:0.25] +; HASWELL-NEXT: incq (%rsi) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_lahf_sahf: +; BROADWELL-LABEL: test_inc64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: lahf # sched: [1:0.25] -; BROADWELL-NEXT: sahf # sched: [1:0.25] +; BROADWELL-NEXT: incq %rdi # sched: [1:0.25] +; BROADWELL-NEXT: incq (%rsi) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_lahf_sahf: +; SKYLAKE-LABEL: test_inc64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: lahf # sched: [1:0.25] -; SKYLAKE-NEXT: sahf # sched: [1:0.25] +; SKYLAKE-NEXT: incq %rdi # sched: [1:0.25] +; SKYLAKE-NEXT: incq (%rsi) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_lahf_sahf: +; SKX-LABEL: test_inc64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: lahf # sched: [1:0.25] -; SKX-NEXT: sahf # sched: [1:0.25] +; SKX-NEXT: incq %rdi # sched: [1:0.25] +; SKX-NEXT: incq (%rsi) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_lahf_sahf: +; BTVER2-LABEL: test_inc64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: lahf # sched: [1:0.50] -; BTVER2-NEXT: sahf # sched: [1:0.50] +; BTVER2-NEXT: incq %rdi # sched: [1:0.50] +; BTVER2-NEXT: incq (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_lahf_sahf: +; ZNVER1-LABEL: test_inc64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: lahf # sched: [100:?] -; ZNVER1-NEXT: sahf # sched: [2:0.25] +; ZNVER1-NEXT: incq %rdi # sched: [1:0.25] +; ZNVER1-NEXT: incq (%rsi) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "lahf \0A\09 sahf", ""() nounwind + tail call void asm "incq $0 \0A\09 incq $1", "r,*m"(i64 %a0, i64* %a1) nounwind ret void } -; TODO - test_lds -; TODO - test_les -; TODO - test_lfs -; TODO - test_lgs -; TODO - test_lss - -; TODO - test_lea - -; TODO - test_leave - -; TODO - test_lods -; TODO - test_lodsb -; TODO - test_lodsw -; TODO - test_lodsd -; TODO - test_lodsq - -; TODO - test_loop -; TODO - test_loope -; TODO - test_loopne -; TODO - test_loopnz -; TODO - test_loopz - -; TODO - test_mov -; TODO - test_movnti - -define void @test_movs() optsize { -; GENERIC-LABEL: test_movs: +define void @test_ins() optsize { +; GENERIC-LABEL: test_ins: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: movsb (%rsi), %es:(%rdi) # sched: [8:1.00] -; GENERIC-NEXT: movsw (%rsi), %es:(%rdi) # sched: [8:1.00] -; GENERIC-NEXT: movsl (%rsi), %es:(%rdi) # sched: [8:1.00] -; GENERIC-NEXT: movsq (%rsi), %es:(%rdi) # sched: [8:1.00] +; GENERIC-NEXT: insb %dx, %es:(%rdi) # sched: [100:0.33] +; GENERIC-NEXT: insw %dx, %es:(%rdi) # sched: [100:0.33] +; GENERIC-NEXT: insl %dx, %es:(%rdi) # sched: [100:0.33] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_movs: +; ATOM-LABEL: test_ins: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: movsb (%rsi), %es:(%rdi) # sched: [3:1.50] -; ATOM-NEXT: movsw (%rsi), %es:(%rdi) # sched: [3:1.50] -; ATOM-NEXT: movsl (%rsi), %es:(%rdi) # sched: [3:1.50] -; ATOM-NEXT: movsq (%rsi), %es:(%rdi) # sched: [3:1.50] +; ATOM-NEXT: insb %dx, %es:(%rdi) # sched: [59:29.50] +; ATOM-NEXT: insw %dx, %es:(%rdi) # sched: [59:29.50] +; ATOM-NEXT: insl %dx, %es:(%rdi) # sched: [59:29.50] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_movs: +; SLM-LABEL: test_ins: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:1.00] -; SLM-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:1.00] -; SLM-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:1.00] -; SLM-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: insb %dx, %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: insw %dx, %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: insl %dx, %es:(%rdi) # sched: [100:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_movs: +; SANDY-LABEL: test_ins: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: movsb (%rsi), %es:(%rdi) # sched: [8:1.00] -; SANDY-NEXT: movsw (%rsi), %es:(%rdi) # sched: [8:1.00] -; SANDY-NEXT: movsl (%rsi), %es:(%rdi) # sched: [8:1.00] -; SANDY-NEXT: movsq (%rsi), %es:(%rdi) # sched: [8:1.00] +; SANDY-NEXT: insb %dx, %es:(%rdi) # sched: [100:0.33] +; SANDY-NEXT: insw %dx, %es:(%rdi) # sched: [100:0.33] +; SANDY-NEXT: insl %dx, %es:(%rdi) # sched: [100:0.33] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_movs: +; HASWELL-LABEL: test_ins: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: movsb (%rsi), %es:(%rdi) # sched: [4:1.00] -; HASWELL-NEXT: movsw (%rsi), %es:(%rdi) # sched: [4:1.00] -; HASWELL-NEXT: movsl (%rsi), %es:(%rdi) # sched: [4:1.00] -; HASWELL-NEXT: movsq (%rsi), %es:(%rdi) # sched: [4:1.00] +; HASWELL-NEXT: insb %dx, %es:(%rdi) # sched: [21:1.25] +; HASWELL-NEXT: insw %dx, %es:(%rdi) # sched: [21:1.25] +; HASWELL-NEXT: insl %dx, %es:(%rdi) # sched: [21:1.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_movs: +; BROADWELL-LABEL: test_ins: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:0.25] -; BROADWELL-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:0.25] -; BROADWELL-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:0.25] -; BROADWELL-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:0.25] +; BROADWELL-NEXT: insb %dx, %es:(%rdi) # sched: [20:1.25] +; BROADWELL-NEXT: insw %dx, %es:(%rdi) # sched: [20:1.25] +; BROADWELL-NEXT: insl %dx, %es:(%rdi) # sched: [20:1.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_movs: +; SKYLAKE-LABEL: test_ins: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:0.25] -; SKYLAKE-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:0.25] -; SKYLAKE-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:0.25] -; SKYLAKE-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:0.25] +; SKYLAKE-NEXT: insb %dx, %es:(%rdi) # sched: [20:1.25] +; SKYLAKE-NEXT: insw %dx, %es:(%rdi) # sched: [20:1.25] +; SKYLAKE-NEXT: insl %dx, %es:(%rdi) # sched: [20:1.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_movs: +; SKX-LABEL: test_ins: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:0.25] -; SKX-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:0.25] -; SKX-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:0.25] -; SKX-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:0.25] +; SKX-NEXT: insb %dx, %es:(%rdi) # sched: [20:1.25] +; SKX-NEXT: insw %dx, %es:(%rdi) # sched: [20:1.25] +; SKX-NEXT: insl %dx, %es:(%rdi) # sched: [20:1.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_movs: +; BTVER2-LABEL: test_ins: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:0.17] -; BTVER2-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:0.17] -; BTVER2-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:0.17] -; BTVER2-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: insb %dx, %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: insw %dx, %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: insl %dx, %es:(%rdi) # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_movs: +; ZNVER1-LABEL: test_ins: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:?] -; ZNVER1-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:?] -; ZNVER1-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:?] -; ZNVER1-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: insb %dx, %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: insw %dx, %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: insl %dx, %es:(%rdi) # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "movsb \0A\09 movsw \0A\09 movsl \0A\09 movsq", ""() + call void asm sideeffect "insb \0A\09 insw \0A\09 insl", ""() ret void } -; TODO - test_movsx -; TODO - test_movzx - -define i64 @test_movslq(i32 %a0, i32 *%a1) optsize { -; GENERIC-LABEL: test_movslq: +define void @test_int() optsize { +; GENERIC-LABEL: test_int: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: movslq %edi, %rax # sched: [1:0.33] -; GENERIC-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] +; GENERIC-NEXT: int $7 # sched: [100:0.33] ; GENERIC-NEXT: #NO_APP -; GENERIC-NEXT: orq %rcx, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_movslq: +; ATOM-LABEL: test_int: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: movslq %edi, %rax # sched: [1:1.00] -; ATOM-NEXT: movslq (%rsi), %rcx # sched: [1:1.00] +; ATOM-NEXT: int $7 # sched: [127:63.50] ; ATOM-NEXT: #NO_APP -; ATOM-NEXT: orq %rcx, %rax # sched: [1:0.50] ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_movslq: +; SLM-LABEL: test_int: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: movslq %edi, %rax # sched: [1:0.50] -; SLM-NEXT: movslq (%rsi), %rcx # sched: [4:1.00] +; SLM-NEXT: int $7 # sched: [100:1.00] ; SLM-NEXT: #NO_APP -; SLM-NEXT: orq %rcx, %rax # sched: [1:0.50] ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_movslq: +; SANDY-LABEL: test_int: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: movslq %edi, %rax # sched: [1:0.33] -; SANDY-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] +; SANDY-NEXT: int $7 # sched: [100:0.33] ; SANDY-NEXT: #NO_APP -; SANDY-NEXT: orq %rcx, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_movslq: +; HASWELL-LABEL: test_int: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: movslq %edi, %rax # sched: [1:0.25] -; HASWELL-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] +; HASWELL-NEXT: int $7 # sched: [100:0.25] ; HASWELL-NEXT: #NO_APP -; HASWELL-NEXT: orq %rcx, %rax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_movslq: +; BROADWELL-LABEL: test_int: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: movslq %edi, %rax # sched: [1:0.25] -; BROADWELL-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] +; BROADWELL-NEXT: int $7 # sched: [100:0.25] ; BROADWELL-NEXT: #NO_APP -; BROADWELL-NEXT: orq %rcx, %rax # sched: [1:0.25] ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_movslq: +; SKYLAKE-LABEL: test_int: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: movslq %edi, %rax # sched: [1:0.25] -; SKYLAKE-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] +; SKYLAKE-NEXT: int $7 # sched: [100:0.25] ; SKYLAKE-NEXT: #NO_APP -; SKYLAKE-NEXT: orq %rcx, %rax # sched: [1:0.25] ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_movslq: +; SKX-LABEL: test_int: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: movslq %edi, %rax # sched: [1:0.25] -; SKX-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] +; SKX-NEXT: int $7 # sched: [100:0.25] ; SKX-NEXT: #NO_APP -; SKX-NEXT: orq %rcx, %rax # sched: [1:0.25] ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_movslq: +; BTVER2-LABEL: test_int: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: movslq %edi, %rax # sched: [1:0.50] -; BTVER2-NEXT: movslq (%rsi), %rcx # sched: [4:1.00] +; BTVER2-NEXT: int $7 # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP -; BTVER2-NEXT: orq %rcx, %rax # sched: [1:0.50] ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_movslq: +; ZNVER1-LABEL: test_int: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: movslq %edi, %rax # sched: [1:0.25] -; ZNVER1-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] +; ZNVER1-NEXT: int $7 # sched: [100:?] ; ZNVER1-NEXT: #NO_APP -; ZNVER1-NEXT: orq %rcx, %rax # sched: [1:0.25] ; ZNVER1-NEXT: retq # sched: [1:0.50] - %1 = call { i64, i64 } asm sideeffect "movslq $2, $0 \0A\09 movslq $3, $1", "=r,=r,r,*m"(i32 %a0, i32 *%a1) - %2 = extractvalue { i64, i64 } %1, 0 - %3 = extractvalue { i64, i64 } %1, 1 - %4 = or i64 %2, %3 - ret i64 %4 + call void asm sideeffect "int $0", "i"(i8 7) + ret void } -define void @test_mul(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { -; GENERIC-LABEL: test_mul: +define void @test_invlpg_invlpga(i8 *%a0) optsize { +; GENERIC-LABEL: test_invlpg_invlpga: ; GENERIC: # %bb.0: -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: mulb %dil # sched: [3:1.00] -; GENERIC-NEXT: mulb (%r8) # sched: [8:1.00] -; GENERIC-NEXT: mulw %si # sched: [4:1.00] -; GENERIC-NEXT: mulw (%r9) # sched: [9:1.00] -; GENERIC-NEXT: mull %edx # sched: [4:1.00] -; GENERIC-NEXT: mull (%rax) # sched: [9:1.00] -; GENERIC-NEXT: mulq %rcx # sched: [4:1.00] -; GENERIC-NEXT: mulq (%r10) # sched: [9:1.00] +; GENERIC-NEXT: invlpg (%rdi) # sched: [100:0.33] +; GENERIC-NEXT: invlpga %ecx, %rax # sched: [100:0.33] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_mul: +; ATOM-LABEL: test_invlpg_invlpga: ; ATOM: # %bb.0: -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: mulb %dil # sched: [7:3.50] -; ATOM-NEXT: mulb (%r8) # sched: [7:3.50] -; ATOM-NEXT: mulw %si # sched: [7:3.50] -; ATOM-NEXT: mulw (%r9) # sched: [8:4.00] -; ATOM-NEXT: mull %edx # sched: [6:3.00] -; ATOM-NEXT: mull (%rax) # sched: [7:3.50] -; ATOM-NEXT: mulq %rcx # sched: [12:6.00] -; ATOM-NEXT: mulq (%r10) # sched: [12:6.00] +; ATOM-NEXT: invlpg (%rdi) # sched: [71:35.50] +; ATOM-NEXT: invlpga %ecx, %rax # sched: [71:35.50] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_mul: +; SLM-LABEL: test_invlpg_invlpga: ; SLM: # %bb.0: -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: mulb %dil # sched: [3:1.00] -; SLM-NEXT: mulb (%r8) # sched: [6:1.00] -; SLM-NEXT: mulw %si # sched: [3:1.00] -; SLM-NEXT: mulw (%r9) # sched: [6:1.00] -; SLM-NEXT: mull %edx # sched: [3:1.00] -; SLM-NEXT: mull (%rax) # sched: [6:1.00] -; SLM-NEXT: mulq %rcx # sched: [3:1.00] -; SLM-NEXT: mulq (%r10) # sched: [6:1.00] +; SLM-NEXT: invlpg (%rdi) # sched: [100:1.00] +; SLM-NEXT: invlpga %ecx, %rax # sched: [100:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_mul: +; SANDY-LABEL: test_invlpg_invlpga: ; SANDY: # %bb.0: -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: mulb %dil # sched: [3:1.00] -; SANDY-NEXT: mulb (%r8) # sched: [8:1.00] -; SANDY-NEXT: mulw %si # sched: [4:1.00] -; SANDY-NEXT: mulw (%r9) # sched: [9:1.00] -; SANDY-NEXT: mull %edx # sched: [4:1.00] -; SANDY-NEXT: mull (%rax) # sched: [9:1.00] -; SANDY-NEXT: mulq %rcx # sched: [4:1.00] -; SANDY-NEXT: mulq (%r10) # sched: [9:1.00] -; SANDY-NEXT: #NO_APP +; SANDY-NEXT: invlpg (%rdi) # sched: [100:0.33] +; SANDY-NEXT: invlpga %ecx, %rax # sched: [100:0.33] +; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_mul: +; HASWELL-LABEL: test_invlpg_invlpga: ; HASWELL: # %bb.0: -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: mulb %dil # sched: [3:1.00] -; HASWELL-NEXT: mulb (%r8) # sched: [8:1.00] -; HASWELL-NEXT: mulw %si # sched: [4:1.00] -; HASWELL-NEXT: mulw (%r9) # sched: [8:1.00] -; HASWELL-NEXT: mull %edx # sched: [4:1.00] -; HASWELL-NEXT: mull (%rax) # sched: [8:1.00] -; HASWELL-NEXT: mulq %rcx # sched: [4:1.00] -; HASWELL-NEXT: mulq (%r10) # sched: [8:1.00] +; HASWELL-NEXT: invlpg (%rdi) # sched: [100:0.25] +; HASWELL-NEXT: invlpga %ecx, %rax # sched: [100:0.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_mul: +; BROADWELL-LABEL: test_invlpg_invlpga: ; BROADWELL: # %bb.0: -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: mulb %dil # sched: [3:1.00] -; BROADWELL-NEXT: mulb (%r8) # sched: [8:1.00] -; BROADWELL-NEXT: mulw %si # sched: [4:1.00] -; BROADWELL-NEXT: mulw (%r9) # sched: [8:1.00] -; BROADWELL-NEXT: mull %edx # sched: [4:1.00] -; BROADWELL-NEXT: mull (%rax) # sched: [8:1.00] -; BROADWELL-NEXT: mulq %rcx # sched: [4:1.00] -; BROADWELL-NEXT: mulq (%r10) # sched: [8:1.00] +; BROADWELL-NEXT: invlpg (%rdi) # sched: [100:0.25] +; BROADWELL-NEXT: invlpga %ecx, %rax # sched: [100:0.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_mul: +; SKYLAKE-LABEL: test_invlpg_invlpga: ; SKYLAKE: # %bb.0: -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: mulb %dil # sched: [3:1.00] -; SKYLAKE-NEXT: mulb (%r8) # sched: [8:1.00] -; SKYLAKE-NEXT: mulw %si # sched: [4:1.00] -; SKYLAKE-NEXT: mulw (%r9) # sched: [8:1.00] -; SKYLAKE-NEXT: mull %edx # sched: [5:1.00] -; SKYLAKE-NEXT: mull (%rax) # sched: [8:1.00] -; SKYLAKE-NEXT: mulq %rcx # sched: [4:1.00] -; SKYLAKE-NEXT: mulq (%r10) # sched: [8:1.00] +; SKYLAKE-NEXT: invlpg (%rdi) # sched: [100:0.25] +; SKYLAKE-NEXT: invlpga %ecx, %rax # sched: [100:0.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_mul: +; SKX-LABEL: test_invlpg_invlpga: ; SKX: # %bb.0: -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: mulb %dil # sched: [3:1.00] -; SKX-NEXT: mulb (%r8) # sched: [8:1.00] -; SKX-NEXT: mulw %si # sched: [4:1.00] -; SKX-NEXT: mulw (%r9) # sched: [8:1.00] -; SKX-NEXT: mull %edx # sched: [4:1.00] -; SKX-NEXT: mull (%rax) # sched: [8:1.00] -; SKX-NEXT: mulq %rcx # sched: [4:1.00] -; SKX-NEXT: mulq (%r10) # sched: [8:1.00] +; SKX-NEXT: invlpg (%rdi) # sched: [100:0.25] +; SKX-NEXT: invlpga %ecx, %rax # sched: [100:0.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_mul: +; BTVER2-LABEL: test_invlpg_invlpga: ; BTVER2: # %bb.0: -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: mulb %dil # sched: [3:1.00] -; BTVER2-NEXT: mulb (%r8) # sched: [6:1.00] -; BTVER2-NEXT: mulw %si # sched: [3:1.00] -; BTVER2-NEXT: mulw (%r9) # sched: [6:1.00] -; BTVER2-NEXT: mull %edx # sched: [3:1.00] -; BTVER2-NEXT: mull (%rax) # sched: [6:1.00] -; BTVER2-NEXT: mulq %rcx # sched: [3:1.00] -; BTVER2-NEXT: mulq (%r10) # sched: [6:1.00] +; BTVER2-NEXT: invlpg (%rdi) # sched: [100:0.17] +; BTVER2-NEXT: invlpga %ecx, %rax # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_mul: +; ZNVER1-LABEL: test_invlpg_invlpga: ; ZNVER1: # %bb.0: -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: mulb %dil # sched: [4:1.00] -; ZNVER1-NEXT: mulb (%r8) # sched: [8:1.00] -; ZNVER1-NEXT: mulw %si # sched: [3:1.00] -; ZNVER1-NEXT: mulw (%r9) # sched: [8:1.00] -; ZNVER1-NEXT: mull %edx # sched: [3:1.00] -; ZNVER1-NEXT: mull (%rax) # sched: [8:1.00] -; ZNVER1-NEXT: mulq %rcx # sched: [4:1.00] -; ZNVER1-NEXT: mulq (%r10) # sched: [9:1.00] +; ZNVER1-NEXT: invlpg (%rdi) # sched: [100:?] +; ZNVER1-NEXT: invlpga %ecx, %rax # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "mulb $0 \0A\09 mulb $4 \0A\09 mulw $1 \0A\09 mulw $5 \0A\09 mull $2 \0A\09 mull $6 \0A\09 mulq $3 \0A\09 mulq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind + tail call void asm sideeffect "invlpg $0 \0A\09 invlpga %ecx, %rax", "*m"(i8 *%a0) nounwind ret void } -define void @test_neg(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { -; GENERIC-LABEL: test_neg: +; TODO - test_jcc +; TODO - test_jcxz +; TODO - test_jwcxz +; TODO - test_jrcxz + +; TODO - test_jmp + +define void @test_lahf_sahf() optsize { +; GENERIC-LABEL: test_lahf_sahf: ; GENERIC: # %bb.0: -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: negb %dil # sched: [1:0.33] -; GENERIC-NEXT: negb (%r8) # sched: [7:1.00] -; GENERIC-NEXT: negw %si # sched: [1:0.33] -; GENERIC-NEXT: negw (%r9) # sched: [7:1.00] -; GENERIC-NEXT: negl %edx # sched: [1:0.33] -; GENERIC-NEXT: negl (%rax) # sched: [7:1.00] -; GENERIC-NEXT: negq %rcx # sched: [1:0.33] -; GENERIC-NEXT: negq (%r10) # sched: [7:1.00] +; GENERIC-NEXT: lahf # sched: [1:0.50] +; GENERIC-NEXT: sahf # sched: [1:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_neg: +; ATOM-LABEL: test_lahf_sahf: ; ATOM: # %bb.0: -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: negb %dil # sched: [1:0.50] -; ATOM-NEXT: negb (%r8) # sched: [1:1.00] -; ATOM-NEXT: negw %si # sched: [1:0.50] -; ATOM-NEXT: negw (%r9) # sched: [1:1.00] -; ATOM-NEXT: negl %edx # sched: [1:0.50] -; ATOM-NEXT: negl (%rax) # sched: [1:1.00] -; ATOM-NEXT: negq %rcx # sched: [1:0.50] -; ATOM-NEXT: negq (%r10) # sched: [1:1.00] +; ATOM-NEXT: lahf # sched: [1:0.50] +; ATOM-NEXT: sahf # sched: [1:0.50] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_neg: +; SLM-LABEL: test_lahf_sahf: ; SLM: # %bb.0: -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: negb %dil # sched: [1:0.50] -; SLM-NEXT: negb (%r8) # sched: [4:2.00] -; SLM-NEXT: negw %si # sched: [1:0.50] -; SLM-NEXT: negw (%r9) # sched: [4:2.00] -; SLM-NEXT: negl %edx # sched: [1:0.50] -; SLM-NEXT: negl (%rax) # sched: [4:2.00] -; SLM-NEXT: negq %rcx # sched: [1:0.50] -; SLM-NEXT: negq (%r10) # sched: [4:2.00] +; SLM-NEXT: lahf # sched: [1:0.50] +; SLM-NEXT: sahf # sched: [1:0.50] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_neg: +; SANDY-LABEL: test_lahf_sahf: ; SANDY: # %bb.0: -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: negb %dil # sched: [1:0.33] -; SANDY-NEXT: negb (%r8) # sched: [7:1.00] -; SANDY-NEXT: negw %si # sched: [1:0.33] -; SANDY-NEXT: negw (%r9) # sched: [7:1.00] -; SANDY-NEXT: negl %edx # sched: [1:0.33] -; SANDY-NEXT: negl (%rax) # sched: [7:1.00] -; SANDY-NEXT: negq %rcx # sched: [1:0.33] -; SANDY-NEXT: negq (%r10) # sched: [7:1.00] +; SANDY-NEXT: lahf # sched: [1:0.50] +; SANDY-NEXT: sahf # sched: [1:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_neg: +; HASWELL-LABEL: test_lahf_sahf: ; HASWELL: # %bb.0: -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: negb %dil # sched: [1:0.25] -; HASWELL-NEXT: negb (%r8) # sched: [7:1.00] -; HASWELL-NEXT: negw %si # sched: [1:0.25] -; HASWELL-NEXT: negw (%r9) # sched: [7:1.00] -; HASWELL-NEXT: negl %edx # sched: [1:0.25] -; HASWELL-NEXT: negl (%rax) # sched: [7:1.00] -; HASWELL-NEXT: negq %rcx # sched: [1:0.25] -; HASWELL-NEXT: negq (%r10) # sched: [7:1.00] +; HASWELL-NEXT: lahf # sched: [1:0.25] +; HASWELL-NEXT: sahf # sched: [1:0.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_neg: +; BROADWELL-LABEL: test_lahf_sahf: ; BROADWELL: # %bb.0: -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: negb %dil # sched: [1:0.25] -; BROADWELL-NEXT: negb (%r8) # sched: [6:1.00] -; BROADWELL-NEXT: negw %si # sched: [1:0.25] -; BROADWELL-NEXT: negw (%r9) # sched: [6:1.00] -; BROADWELL-NEXT: negl %edx # sched: [1:0.25] -; BROADWELL-NEXT: negl (%rax) # sched: [6:1.00] -; BROADWELL-NEXT: negq %rcx # sched: [1:0.25] -; BROADWELL-NEXT: negq (%r10) # sched: [6:1.00] +; BROADWELL-NEXT: lahf # sched: [1:0.25] +; BROADWELL-NEXT: sahf # sched: [1:0.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_neg: +; SKYLAKE-LABEL: test_lahf_sahf: ; SKYLAKE: # %bb.0: -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: negb %dil # sched: [1:0.25] -; SKYLAKE-NEXT: negb (%r8) # sched: [6:1.00] -; SKYLAKE-NEXT: negw %si # sched: [1:0.25] -; SKYLAKE-NEXT: negw (%r9) # sched: [6:1.00] -; SKYLAKE-NEXT: negl %edx # sched: [1:0.25] -; SKYLAKE-NEXT: negl (%rax) # sched: [6:1.00] -; SKYLAKE-NEXT: negq %rcx # sched: [1:0.25] -; SKYLAKE-NEXT: negq (%r10) # sched: [6:1.00] +; SKYLAKE-NEXT: lahf # sched: [1:0.25] +; SKYLAKE-NEXT: sahf # sched: [1:0.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_neg: +; SKX-LABEL: test_lahf_sahf: ; SKX: # %bb.0: -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: negb %dil # sched: [1:0.25] -; SKX-NEXT: negb (%r8) # sched: [6:1.00] -; SKX-NEXT: negw %si # sched: [1:0.25] -; SKX-NEXT: negw (%r9) # sched: [6:1.00] -; SKX-NEXT: negl %edx # sched: [1:0.25] -; SKX-NEXT: negl (%rax) # sched: [6:1.00] -; SKX-NEXT: negq %rcx # sched: [1:0.25] -; SKX-NEXT: negq (%r10) # sched: [6:1.00] +; SKX-NEXT: lahf # sched: [1:0.25] +; SKX-NEXT: sahf # sched: [1:0.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_neg: +; BTVER2-LABEL: test_lahf_sahf: ; BTVER2: # %bb.0: -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: negb %dil # sched: [1:0.50] -; BTVER2-NEXT: negb (%r8) # sched: [4:1.00] -; BTVER2-NEXT: negw %si # sched: [1:0.50] -; BTVER2-NEXT: negw (%r9) # sched: [4:1.00] -; BTVER2-NEXT: negl %edx # sched: [1:0.50] -; BTVER2-NEXT: negl (%rax) # sched: [4:1.00] -; BTVER2-NEXT: negq %rcx # sched: [1:0.50] -; BTVER2-NEXT: negq (%r10) # sched: [4:1.00] +; BTVER2-NEXT: lahf # sched: [1:0.50] +; BTVER2-NEXT: sahf # sched: [1:0.50] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_neg: +; ZNVER1-LABEL: test_lahf_sahf: ; ZNVER1: # %bb.0: -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: negb %dil # sched: [1:0.25] -; ZNVER1-NEXT: negb (%r8) # sched: [5:0.50] -; ZNVER1-NEXT: negw %si # sched: [1:0.25] -; ZNVER1-NEXT: negw (%r9) # sched: [5:0.50] -; ZNVER1-NEXT: negl %edx # sched: [1:0.25] -; ZNVER1-NEXT: negl (%rax) # sched: [5:0.50] -; ZNVER1-NEXT: negq %rcx # sched: [1:0.25] -; ZNVER1-NEXT: negq (%r10) # sched: [5:0.50] +; ZNVER1-NEXT: lahf # sched: [100:?] +; ZNVER1-NEXT: sahf # sched: [2:0.25] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "negb $0 \0A\09 negb $4 \0A\09 negw $1 \0A\09 negw $5 \0A\09 negl $2 \0A\09 negl $6 \0A\09 negq $3 \0A\09 negq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind + tail call void asm "lahf \0A\09 sahf", ""() nounwind ret void } -define void @test_nop(i16 %a0, i32 %a1, i64 %a2, i16 *%p0, i32 *%p1, i64 *%p2) optsize { -; GENERIC-LABEL: test_nop: -; GENERIC: # %bb.0: -; GENERIC-NEXT: #APP -; GENERIC-NEXT: nop # sched: [1:?] -; GENERIC-NEXT: nopw %di # sched: [1:?] -; GENERIC-NEXT: nopw (%rcx) # sched: [1:?] -; GENERIC-NEXT: nopl %esi # sched: [1:?] -; GENERIC-NEXT: nopl (%r8) # sched: [1:?] -; GENERIC-NEXT: nopq %rdx # sched: [1:?] -; GENERIC-NEXT: nopq (%r9) # sched: [1:?] -; GENERIC-NEXT: #NO_APP -; GENERIC-NEXT: retq # sched: [1:1.00] -; -; ATOM-LABEL: test_nop: -; ATOM: # %bb.0: +; TODO - test_lds +; TODO - test_les +; TODO - test_lfs +; TODO - test_lgs +; TODO - test_lss + +; TODO - test_lea + +; TODO - test_leave + +; TODO - test_lods +; TODO - test_lodsb +; TODO - test_lodsw +; TODO - test_lodsd +; TODO - test_lodsq + +; TODO - test_loop +; TODO - test_loope +; TODO - test_loopne +; TODO - test_loopnz +; TODO - test_loopz + +; TODO - test_mov +; TODO - test_movnti + +define void @test_movs() optsize { +; GENERIC-LABEL: test_movs: +; GENERIC: # %bb.0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: movsb (%rsi), %es:(%rdi) # sched: [8:1.00] +; GENERIC-NEXT: movsw (%rsi), %es:(%rdi) # sched: [8:1.00] +; GENERIC-NEXT: movsl (%rsi), %es:(%rdi) # sched: [8:1.00] +; GENERIC-NEXT: movsq (%rsi), %es:(%rdi) # sched: [8:1.00] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_movs: +; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: nop # sched: [1:0.50] -; ATOM-NEXT: nopw %di # sched: [1:0.50] -; ATOM-NEXT: nopw (%rcx) # sched: [1:0.50] -; ATOM-NEXT: nopl %esi # sched: [1:0.50] -; ATOM-NEXT: nopl (%r8) # sched: [1:0.50] -; ATOM-NEXT: nopq %rdx # sched: [1:0.50] -; ATOM-NEXT: nopq (%r9) # sched: [1:0.50] +; ATOM-NEXT: movsb (%rsi), %es:(%rdi) # sched: [3:1.50] +; ATOM-NEXT: movsw (%rsi), %es:(%rdi) # sched: [3:1.50] +; ATOM-NEXT: movsl (%rsi), %es:(%rdi) # sched: [3:1.50] +; ATOM-NEXT: movsq (%rsi), %es:(%rdi) # sched: [3:1.50] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_nop: +; SLM-LABEL: test_movs: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: nop # sched: [1:?] -; SLM-NEXT: nopw %di # sched: [1:?] -; SLM-NEXT: nopw (%rcx) # sched: [1:?] -; SLM-NEXT: nopl %esi # sched: [1:?] -; SLM-NEXT: nopl (%r8) # sched: [1:?] -; SLM-NEXT: nopq %rdx # sched: [1:?] -; SLM-NEXT: nopq (%r9) # sched: [1:?] +; SLM-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_nop: +; SANDY-LABEL: test_movs: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: nop # sched: [1:?] -; SANDY-NEXT: nopw %di # sched: [1:?] -; SANDY-NEXT: nopw (%rcx) # sched: [1:?] -; SANDY-NEXT: nopl %esi # sched: [1:?] -; SANDY-NEXT: nopl (%r8) # sched: [1:?] -; SANDY-NEXT: nopq %rdx # sched: [1:?] -; SANDY-NEXT: nopq (%r9) # sched: [1:?] +; SANDY-NEXT: movsb (%rsi), %es:(%rdi) # sched: [8:1.00] +; SANDY-NEXT: movsw (%rsi), %es:(%rdi) # sched: [8:1.00] +; SANDY-NEXT: movsl (%rsi), %es:(%rdi) # sched: [8:1.00] +; SANDY-NEXT: movsq (%rsi), %es:(%rdi) # sched: [8:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_nop: +; HASWELL-LABEL: test_movs: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: nop # sched: [1:0.25] -; HASWELL-NEXT: nopw %di # sched: [1:0.25] -; HASWELL-NEXT: nopw (%rcx) # sched: [1:0.25] -; HASWELL-NEXT: nopl %esi # sched: [1:0.25] -; HASWELL-NEXT: nopl (%r8) # sched: [1:0.25] -; HASWELL-NEXT: nopq %rdx # sched: [1:0.25] -; HASWELL-NEXT: nopq (%r9) # sched: [1:0.25] +; HASWELL-NEXT: movsb (%rsi), %es:(%rdi) # sched: [4:1.00] +; HASWELL-NEXT: movsw (%rsi), %es:(%rdi) # sched: [4:1.00] +; HASWELL-NEXT: movsl (%rsi), %es:(%rdi) # sched: [4:1.00] +; HASWELL-NEXT: movsq (%rsi), %es:(%rdi) # sched: [4:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_nop: +; BROADWELL-LABEL: test_movs: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: nop # sched: [1:0.25] -; BROADWELL-NEXT: nopw %di # sched: [1:0.25] -; BROADWELL-NEXT: nopw (%rcx) # sched: [1:0.25] -; BROADWELL-NEXT: nopl %esi # sched: [1:0.25] -; BROADWELL-NEXT: nopl (%r8) # sched: [1:0.25] -; BROADWELL-NEXT: nopq %rdx # sched: [1:0.25] -; BROADWELL-NEXT: nopq (%r9) # sched: [1:0.25] +; BROADWELL-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:0.25] +; BROADWELL-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:0.25] +; BROADWELL-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:0.25] +; BROADWELL-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:0.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_nop: +; SKYLAKE-LABEL: test_movs: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: nop # sched: [1:0.25] -; SKYLAKE-NEXT: nopw %di # sched: [1:0.25] -; SKYLAKE-NEXT: nopw (%rcx) # sched: [1:0.25] -; SKYLAKE-NEXT: nopl %esi # sched: [1:0.25] -; SKYLAKE-NEXT: nopl (%r8) # sched: [1:0.25] -; SKYLAKE-NEXT: nopq %rdx # sched: [1:0.25] -; SKYLAKE-NEXT: nopq (%r9) # sched: [1:0.25] +; SKYLAKE-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:0.25] +; SKYLAKE-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:0.25] +; SKYLAKE-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:0.25] +; SKYLAKE-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:0.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_nop: +; SKX-LABEL: test_movs: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: nop # sched: [1:0.25] -; SKX-NEXT: nopw %di # sched: [1:0.25] -; SKX-NEXT: nopw (%rcx) # sched: [1:0.25] -; SKX-NEXT: nopl %esi # sched: [1:0.25] -; SKX-NEXT: nopl (%r8) # sched: [1:0.25] -; SKX-NEXT: nopq %rdx # sched: [1:0.25] -; SKX-NEXT: nopq (%r9) # sched: [1:0.25] +; SKX-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:0.25] +; SKX-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:0.25] +; SKX-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:0.25] +; SKX-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:0.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_nop: +; BTVER2-LABEL: test_movs: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: nop # sched: [1:?] -; BTVER2-NEXT: nopw %di # sched: [1:?] -; BTVER2-NEXT: nopw (%rcx) # sched: [1:?] -; BTVER2-NEXT: nopl %esi # sched: [1:?] -; BTVER2-NEXT: nopl (%r8) # sched: [1:?] -; BTVER2-NEXT: nopq %rdx # sched: [1:?] -; BTVER2-NEXT: nopq (%r9) # sched: [1:?] +; BTVER2-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_nop: +; ZNVER1-LABEL: test_movs: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: nop # sched: [1:?] -; ZNVER1-NEXT: nopw %di # sched: [1:?] -; ZNVER1-NEXT: nopw (%rcx) # sched: [1:?] -; ZNVER1-NEXT: nopl %esi # sched: [1:?] -; ZNVER1-NEXT: nopl (%r8) # sched: [1:?] -; ZNVER1-NEXT: nopq %rdx # sched: [1:?] -; ZNVER1-NEXT: nopq (%r9) # sched: [1:?] +; ZNVER1-NEXT: movsb (%rsi), %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: movsw (%rsi), %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: movsl (%rsi), %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: movsq (%rsi), %es:(%rdi) # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "nop \0A\09 nopw $0 \0A\09 nopw $3 \0A\09 nopl $1 \0A\09 nopl $4 \0A\09 nopq $2 \0A\09 nopq $5", "r,r,r,*m,*m,*m"(i16 %a0, i32 %a1, i64 %a2, i16 *%p0, i32 *%p1, i64 *%p2) nounwind + call void asm sideeffect "movsb \0A\09 movsw \0A\09 movsl \0A\09 movsq", ""() ret void } -define void @test_not(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { -; GENERIC-LABEL: test_not: +; TODO - test_movsx +; TODO - test_movzx + +define i64 @test_movslq(i32 %a0, i32 *%a1) optsize { +; GENERIC-LABEL: test_movslq: ; GENERIC: # %bb.0: -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: notb %dil # sched: [1:0.33] -; GENERIC-NEXT: notb (%r8) # sched: [7:1.00] -; GENERIC-NEXT: notw %si # sched: [1:0.33] -; GENERIC-NEXT: notw (%r9) # sched: [7:1.00] -; GENERIC-NEXT: notl %edx # sched: [1:0.33] -; GENERIC-NEXT: notl (%rax) # sched: [7:1.00] -; GENERIC-NEXT: notq %rcx # sched: [1:0.33] -; GENERIC-NEXT: notq (%r10) # sched: [7:1.00] +; GENERIC-NEXT: movslq %edi, %rax # sched: [1:0.33] +; GENERIC-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] ; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: orq %rcx, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_not: +; ATOM-LABEL: test_movslq: ; ATOM: # %bb.0: -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] -; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: notb %dil # sched: [1:0.50] -; ATOM-NEXT: notb (%r8) # sched: [1:1.00] -; ATOM-NEXT: notw %si # sched: [1:0.50] -; ATOM-NEXT: notw (%r9) # sched: [1:1.00] -; ATOM-NEXT: notl %edx # sched: [1:0.50] -; ATOM-NEXT: notl (%rax) # sched: [1:1.00] -; ATOM-NEXT: notq %rcx # sched: [1:0.50] -; ATOM-NEXT: notq (%r10) # sched: [1:1.00] +; ATOM-NEXT: movslq %edi, %rax # sched: [1:1.00] +; ATOM-NEXT: movslq (%rsi), %rcx # sched: [1:1.00] ; ATOM-NEXT: #NO_APP +; ATOM-NEXT: orq %rcx, %rax # sched: [1:0.50] ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_not: +; SLM-LABEL: test_movslq: ; SLM: # %bb.0: -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] -; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: notb %dil # sched: [1:0.50] -; SLM-NEXT: notb (%r8) # sched: [4:2.00] -; SLM-NEXT: notw %si # sched: [1:0.50] -; SLM-NEXT: notw (%r9) # sched: [4:2.00] -; SLM-NEXT: notl %edx # sched: [1:0.50] -; SLM-NEXT: notl (%rax) # sched: [4:2.00] -; SLM-NEXT: notq %rcx # sched: [1:0.50] -; SLM-NEXT: notq (%r10) # sched: [4:2.00] +; SLM-NEXT: movslq %edi, %rax # sched: [1:0.50] +; SLM-NEXT: movslq (%rsi), %rcx # sched: [4:1.00] ; SLM-NEXT: #NO_APP +; SLM-NEXT: orq %rcx, %rax # sched: [1:0.50] ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_not: +; SANDY-LABEL: test_movslq: ; SANDY: # %bb.0: -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: notb %dil # sched: [1:0.33] -; SANDY-NEXT: notb (%r8) # sched: [7:1.00] -; SANDY-NEXT: notw %si # sched: [1:0.33] -; SANDY-NEXT: notw (%r9) # sched: [7:1.00] -; SANDY-NEXT: notl %edx # sched: [1:0.33] -; SANDY-NEXT: notl (%rax) # sched: [7:1.00] -; SANDY-NEXT: notq %rcx # sched: [1:0.33] -; SANDY-NEXT: notq (%r10) # sched: [7:1.00] +; SANDY-NEXT: movslq %edi, %rax # sched: [1:0.33] +; SANDY-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] ; SANDY-NEXT: #NO_APP +; SANDY-NEXT: orq %rcx, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_not: +; HASWELL-LABEL: test_movslq: ; HASWELL: # %bb.0: -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: notb %dil # sched: [1:0.25] -; HASWELL-NEXT: notb (%r8) # sched: [7:1.00] -; HASWELL-NEXT: notw %si # sched: [1:0.25] -; HASWELL-NEXT: notw (%r9) # sched: [7:1.00] -; HASWELL-NEXT: notl %edx # sched: [1:0.25] -; HASWELL-NEXT: notl (%rax) # sched: [7:1.00] -; HASWELL-NEXT: notq %rcx # sched: [1:0.25] -; HASWELL-NEXT: notq (%r10) # sched: [7:1.00] +; HASWELL-NEXT: movslq %edi, %rax # sched: [1:0.25] +; HASWELL-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] ; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: orq %rcx, %rax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_not: +; BROADWELL-LABEL: test_movslq: ; BROADWELL: # %bb.0: -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: notb %dil # sched: [1:0.25] -; BROADWELL-NEXT: notb (%r8) # sched: [6:1.00] -; BROADWELL-NEXT: notw %si # sched: [1:0.25] -; BROADWELL-NEXT: notw (%r9) # sched: [6:1.00] -; BROADWELL-NEXT: notl %edx # sched: [1:0.25] -; BROADWELL-NEXT: notl (%rax) # sched: [6:1.00] -; BROADWELL-NEXT: notq %rcx # sched: [1:0.25] -; BROADWELL-NEXT: notq (%r10) # sched: [6:1.00] +; BROADWELL-NEXT: movslq %edi, %rax # sched: [1:0.25] +; BROADWELL-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] ; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: orq %rcx, %rax # sched: [1:0.25] ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_not: +; SKYLAKE-LABEL: test_movslq: ; SKYLAKE: # %bb.0: -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: notb %dil # sched: [1:0.25] -; SKYLAKE-NEXT: notb (%r8) # sched: [6:1.00] -; SKYLAKE-NEXT: notw %si # sched: [1:0.25] -; SKYLAKE-NEXT: notw (%r9) # sched: [6:1.00] -; SKYLAKE-NEXT: notl %edx # sched: [1:0.25] -; SKYLAKE-NEXT: notl (%rax) # sched: [6:1.00] -; SKYLAKE-NEXT: notq %rcx # sched: [1:0.25] -; SKYLAKE-NEXT: notq (%r10) # sched: [6:1.00] +; SKYLAKE-NEXT: movslq %edi, %rax # sched: [1:0.25] +; SKYLAKE-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] ; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: orq %rcx, %rax # sched: [1:0.25] ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_not: +; SKX-LABEL: test_movslq: ; SKX: # %bb.0: -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] -; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: notb %dil # sched: [1:0.25] -; SKX-NEXT: notb (%r8) # sched: [6:1.00] -; SKX-NEXT: notw %si # sched: [1:0.25] -; SKX-NEXT: notw (%r9) # sched: [6:1.00] -; SKX-NEXT: notl %edx # sched: [1:0.25] -; SKX-NEXT: notl (%rax) # sched: [6:1.00] -; SKX-NEXT: notq %rcx # sched: [1:0.25] -; SKX-NEXT: notq (%r10) # sched: [6:1.00] +; SKX-NEXT: movslq %edi, %rax # sched: [1:0.25] +; SKX-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] ; SKX-NEXT: #NO_APP +; SKX-NEXT: orq %rcx, %rax # sched: [1:0.25] ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_not: +; BTVER2-LABEL: test_movslq: ; BTVER2: # %bb.0: -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] -; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: notb %dil # sched: [1:0.50] -; BTVER2-NEXT: notb (%r8) # sched: [4:1.00] -; BTVER2-NEXT: notw %si # sched: [1:0.50] -; BTVER2-NEXT: notw (%r9) # sched: [4:1.00] -; BTVER2-NEXT: notl %edx # sched: [1:0.50] -; BTVER2-NEXT: notl (%rax) # sched: [4:1.00] -; BTVER2-NEXT: notq %rcx # sched: [1:0.50] -; BTVER2-NEXT: notq (%r10) # sched: [4:1.00] +; BTVER2-NEXT: movslq %edi, %rax # sched: [1:0.50] +; BTVER2-NEXT: movslq (%rsi), %rcx # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: orq %rcx, %rax # sched: [1:0.50] ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_not: +; ZNVER1-LABEL: test_movslq: ; ZNVER1: # %bb.0: -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] -; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: notb %dil # sched: [1:0.25] -; ZNVER1-NEXT: notb (%r8) # sched: [5:0.50] -; ZNVER1-NEXT: notw %si # sched: [1:0.25] -; ZNVER1-NEXT: notw (%r9) # sched: [5:0.50] -; ZNVER1-NEXT: notl %edx # sched: [1:0.25] -; ZNVER1-NEXT: notl (%rax) # sched: [5:0.50] -; ZNVER1-NEXT: notq %rcx # sched: [1:0.25] -; ZNVER1-NEXT: notq (%r10) # sched: [5:0.50] +; ZNVER1-NEXT: movslq %edi, %rax # sched: [1:0.25] +; ZNVER1-NEXT: movslq (%rsi), %rcx # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: orq %rcx, %rax # sched: [1:0.25] ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "notb $0 \0A\09 notb $4 \0A\09 notw $1 \0A\09 notw $5 \0A\09 notl $2 \0A\09 notl $6 \0A\09 notq $3 \0A\09 notq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind - ret void + %1 = call { i64, i64 } asm sideeffect "movslq $2, $0 \0A\09 movslq $3, $1", "=r,=r,r,*m"(i32 %a0, i32 *%a1) + %2 = extractvalue { i64, i64 } %1, 0 + %3 = extractvalue { i64, i64 } %1, 1 + %4 = or i64 %2, %3 + ret i64 %4 } -define void @test_or_8(i8 %a0, i8* %a1) optsize { -; GENERIC-LABEL: test_or_8: +define void @test_mul(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { +; GENERIC-LABEL: test_mul: ; GENERIC: # %bb.0: +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: orb $7, %al # sched: [1:0.33] -; GENERIC-NEXT: orb $7, %dil # sched: [1:0.33] -; GENERIC-NEXT: orb $7, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: orb %dil, %dil # sched: [1:0.33] -; GENERIC-NEXT: orb %dil, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: orb (%rsi), %dil # sched: [6:0.50] +; GENERIC-NEXT: mulb %dil # sched: [3:1.00] +; GENERIC-NEXT: mulb (%r8) # sched: [8:1.00] +; GENERIC-NEXT: mulw %si # sched: [4:1.00] +; GENERIC-NEXT: mulw (%r9) # sched: [9:1.00] +; GENERIC-NEXT: mull %edx # sched: [4:1.00] +; GENERIC-NEXT: mull (%rax) # sched: [9:1.00] +; GENERIC-NEXT: mulq %rcx # sched: [4:1.00] +; GENERIC-NEXT: mulq (%r10) # sched: [9:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_or_8: +; ATOM-LABEL: test_mul: ; ATOM: # %bb.0: +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: orb $7, %al # sched: [1:0.50] -; ATOM-NEXT: orb $7, %dil # sched: [1:0.50] -; ATOM-NEXT: orb $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: orb %dil, %dil # sched: [1:0.50] -; ATOM-NEXT: orb %dil, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: orb (%rsi), %dil # sched: [1:1.00] +; ATOM-NEXT: mulb %dil # sched: [7:3.50] +; ATOM-NEXT: mulb (%r8) # sched: [7:3.50] +; ATOM-NEXT: mulw %si # sched: [7:3.50] +; ATOM-NEXT: mulw (%r9) # sched: [8:4.00] +; ATOM-NEXT: mull %edx # sched: [6:3.00] +; ATOM-NEXT: mull (%rax) # sched: [7:3.50] +; ATOM-NEXT: mulq %rcx # sched: [12:6.00] +; ATOM-NEXT: mulq (%r10) # sched: [12:6.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_or_8: +; SLM-LABEL: test_mul: ; SLM: # %bb.0: +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: orb $7, %al # sched: [1:0.50] -; SLM-NEXT: orb $7, %dil # sched: [1:0.50] -; SLM-NEXT: orb $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: orb %dil, %dil # sched: [1:0.50] -; SLM-NEXT: orb %dil, (%rsi) # sched: [4:2.00] -; SLM-NEXT: orb (%rsi), %dil # sched: [4:1.00] +; SLM-NEXT: mulb %dil # sched: [3:1.00] +; SLM-NEXT: mulb (%r8) # sched: [6:1.00] +; SLM-NEXT: mulw %si # sched: [3:1.00] +; SLM-NEXT: mulw (%r9) # sched: [6:1.00] +; SLM-NEXT: mull %edx # sched: [3:1.00] +; SLM-NEXT: mull (%rax) # sched: [6:1.00] +; SLM-NEXT: mulq %rcx # sched: [3:1.00] +; SLM-NEXT: mulq (%r10) # sched: [6:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_or_8: +; SANDY-LABEL: test_mul: ; SANDY: # %bb.0: +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: orb $7, %al # sched: [1:0.33] -; SANDY-NEXT: orb $7, %dil # sched: [1:0.33] -; SANDY-NEXT: orb $7, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: orb %dil, %dil # sched: [1:0.33] -; SANDY-NEXT: orb %dil, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: orb (%rsi), %dil # sched: [6:0.50] +; SANDY-NEXT: mulb %dil # sched: [3:1.00] +; SANDY-NEXT: mulb (%r8) # sched: [8:1.00] +; SANDY-NEXT: mulw %si # sched: [4:1.00] +; SANDY-NEXT: mulw (%r9) # sched: [9:1.00] +; SANDY-NEXT: mull %edx # sched: [4:1.00] +; SANDY-NEXT: mull (%rax) # sched: [9:1.00] +; SANDY-NEXT: mulq %rcx # sched: [4:1.00] +; SANDY-NEXT: mulq (%r10) # sched: [9:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_or_8: +; HASWELL-LABEL: test_mul: ; HASWELL: # %bb.0: +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: orb $7, %al # sched: [1:0.25] -; HASWELL-NEXT: orb $7, %dil # sched: [1:0.25] -; HASWELL-NEXT: orb $7, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: orb %dil, %dil # sched: [1:0.25] -; HASWELL-NEXT: orb %dil, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: orb (%rsi), %dil # sched: [6:0.50] +; HASWELL-NEXT: mulb %dil # sched: [3:1.00] +; HASWELL-NEXT: mulb (%r8) # sched: [8:1.00] +; HASWELL-NEXT: mulw %si # sched: [4:1.00] +; HASWELL-NEXT: mulw (%r9) # sched: [8:1.00] +; HASWELL-NEXT: mull %edx # sched: [4:1.00] +; HASWELL-NEXT: mull (%rax) # sched: [8:1.00] +; HASWELL-NEXT: mulq %rcx # sched: [4:1.00] +; HASWELL-NEXT: mulq (%r10) # sched: [8:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_or_8: +; BROADWELL-LABEL: test_mul: ; BROADWELL: # %bb.0: +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: orb $7, %al # sched: [1:0.25] -; BROADWELL-NEXT: orb $7, %dil # sched: [1:0.25] -; BROADWELL-NEXT: orb $7, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: orb %dil, %dil # sched: [1:0.25] -; BROADWELL-NEXT: orb %dil, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: orb (%rsi), %dil # sched: [6:0.50] +; BROADWELL-NEXT: mulb %dil # sched: [3:1.00] +; BROADWELL-NEXT: mulb (%r8) # sched: [8:1.00] +; BROADWELL-NEXT: mulw %si # sched: [4:1.00] +; BROADWELL-NEXT: mulw (%r9) # sched: [8:1.00] +; BROADWELL-NEXT: mull %edx # sched: [4:1.00] +; BROADWELL-NEXT: mull (%rax) # sched: [8:1.00] +; BROADWELL-NEXT: mulq %rcx # sched: [4:1.00] +; BROADWELL-NEXT: mulq (%r10) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_or_8: +; SKYLAKE-LABEL: test_mul: ; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: orb $7, %al # sched: [1:0.25] -; SKYLAKE-NEXT: orb $7, %dil # sched: [1:0.25] -; SKYLAKE-NEXT: orb $7, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: orb %dil, %dil # sched: [1:0.25] -; SKYLAKE-NEXT: orb %dil, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: orb (%rsi), %dil # sched: [6:0.50] +; SKYLAKE-NEXT: mulb %dil # sched: [3:1.00] +; SKYLAKE-NEXT: mulb (%r8) # sched: [8:1.00] +; SKYLAKE-NEXT: mulw %si # sched: [4:1.00] +; SKYLAKE-NEXT: mulw (%r9) # sched: [8:1.00] +; SKYLAKE-NEXT: mull %edx # sched: [5:1.00] +; SKYLAKE-NEXT: mull (%rax) # sched: [8:1.00] +; SKYLAKE-NEXT: mulq %rcx # sched: [4:1.00] +; SKYLAKE-NEXT: mulq (%r10) # sched: [8:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_or_8: +; SKX-LABEL: test_mul: ; SKX: # %bb.0: +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: orb $7, %al # sched: [1:0.25] -; SKX-NEXT: orb $7, %dil # sched: [1:0.25] -; SKX-NEXT: orb $7, (%rsi) # sched: [6:1.00] -; SKX-NEXT: orb %dil, %dil # sched: [1:0.25] -; SKX-NEXT: orb %dil, (%rsi) # sched: [6:1.00] -; SKX-NEXT: orb (%rsi), %dil # sched: [6:0.50] +; SKX-NEXT: mulb %dil # sched: [3:1.00] +; SKX-NEXT: mulb (%r8) # sched: [8:1.00] +; SKX-NEXT: mulw %si # sched: [4:1.00] +; SKX-NEXT: mulw (%r9) # sched: [8:1.00] +; SKX-NEXT: mull %edx # sched: [4:1.00] +; SKX-NEXT: mull (%rax) # sched: [8:1.00] +; SKX-NEXT: mulq %rcx # sched: [4:1.00] +; SKX-NEXT: mulq (%r10) # sched: [8:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_or_8: +; BTVER2-LABEL: test_mul: ; BTVER2: # %bb.0: +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: orb $7, %al # sched: [1:0.50] -; BTVER2-NEXT: orb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: orb $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: orb %dil, %dil # sched: [1:0.50] -; BTVER2-NEXT: orb %dil, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: orb (%rsi), %dil # sched: [4:1.00] +; BTVER2-NEXT: mulb %dil # sched: [3:1.00] +; BTVER2-NEXT: mulb (%r8) # sched: [6:1.00] +; BTVER2-NEXT: mulw %si # sched: [3:1.00] +; BTVER2-NEXT: mulw (%r9) # sched: [6:1.00] +; BTVER2-NEXT: mull %edx # sched: [3:1.00] +; BTVER2-NEXT: mull (%rax) # sched: [6:1.00] +; BTVER2-NEXT: mulq %rcx # sched: [3:1.00] +; BTVER2-NEXT: mulq (%r10) # sched: [6:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_or_8: +; ZNVER1-LABEL: test_mul: ; ZNVER1: # %bb.0: +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: orb $7, %al # sched: [1:0.25] -; ZNVER1-NEXT: orb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: orb $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: orb %dil, %dil # sched: [1:0.25] -; ZNVER1-NEXT: orb %dil, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: orb (%rsi), %dil # sched: [5:0.50] +; ZNVER1-NEXT: mulb %dil # sched: [4:1.00] +; ZNVER1-NEXT: mulb (%r8) # sched: [8:1.00] +; ZNVER1-NEXT: mulw %si # sched: [3:1.00] +; ZNVER1-NEXT: mulw (%r9) # sched: [8:1.00] +; ZNVER1-NEXT: mull %edx # sched: [3:1.00] +; ZNVER1-NEXT: mull (%rax) # sched: [8:1.00] +; ZNVER1-NEXT: mulq %rcx # sched: [4:1.00] +; ZNVER1-NEXT: mulq (%r10) # sched: [9:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "orb $2, %AL \0A\09 orb $2, $0 \0A\09 orb $2, $1 \0A\09 orb $0, $0 \0A\09 orb $0, $1 \0A\09 orb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind + tail call void asm "mulb $0 \0A\09 mulb $4 \0A\09 mulw $1 \0A\09 mulw $5 \0A\09 mull $2 \0A\09 mull $6 \0A\09 mulq $3 \0A\09 mulq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind ret void } -define void @test_or_16(i16 %a0, i16* %a1) optsize { -; GENERIC-LABEL: test_or_16: + +define void @test_neg(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { +; GENERIC-LABEL: test_neg: ; GENERIC: # %bb.0: +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: orw $511, %ax # imm = 0x1FF -; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: orw $511, %di # imm = 0x1FF -; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: orw $511, (%rsi) # imm = 0x1FF -; GENERIC-NEXT: # sched: [7:1.00] -; GENERIC-NEXT: orw $7, %di # sched: [1:0.33] -; GENERIC-NEXT: orw $7, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: orw %di, %di # sched: [1:0.33] -; GENERIC-NEXT: orw %di, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: orw (%rsi), %di # sched: [6:0.50] +; GENERIC-NEXT: negb %dil # sched: [1:0.33] +; GENERIC-NEXT: negb (%r8) # sched: [7:1.00] +; GENERIC-NEXT: negw %si # sched: [1:0.33] +; GENERIC-NEXT: negw (%r9) # sched: [7:1.00] +; GENERIC-NEXT: negl %edx # sched: [1:0.33] +; GENERIC-NEXT: negl (%rax) # sched: [7:1.00] +; GENERIC-NEXT: negq %rcx # sched: [1:0.33] +; GENERIC-NEXT: negq (%r10) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_or_16: +; ATOM-LABEL: test_neg: ; ATOM: # %bb.0: +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: orw $511, %ax # imm = 0x1FF -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: orw $511, %di # imm = 0x1FF -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: orw $511, (%rsi) # imm = 0x1FF -; ATOM-NEXT: # sched: [1:1.00] -; ATOM-NEXT: orw $7, %di # sched: [1:0.50] -; ATOM-NEXT: orw $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: orw %di, %di # sched: [1:0.50] -; ATOM-NEXT: orw %di, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: orw (%rsi), %di # sched: [1:1.00] +; ATOM-NEXT: negb %dil # sched: [1:0.50] +; ATOM-NEXT: negb (%r8) # sched: [1:1.00] +; ATOM-NEXT: negw %si # sched: [1:0.50] +; ATOM-NEXT: negw (%r9) # sched: [1:1.00] +; ATOM-NEXT: negl %edx # sched: [1:0.50] +; ATOM-NEXT: negl (%rax) # sched: [1:1.00] +; ATOM-NEXT: negq %rcx # sched: [1:0.50] +; ATOM-NEXT: negq (%r10) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_or_16: +; SLM-LABEL: test_neg: ; SLM: # %bb.0: +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: orw $511, %ax # imm = 0x1FF -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: orw $511, %di # imm = 0x1FF -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: orw $511, (%rsi) # imm = 0x1FF -; SLM-NEXT: # sched: [4:2.00] -; SLM-NEXT: orw $7, %di # sched: [1:0.50] -; SLM-NEXT: orw $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: orw %di, %di # sched: [1:0.50] -; SLM-NEXT: orw %di, (%rsi) # sched: [4:2.00] -; SLM-NEXT: orw (%rsi), %di # sched: [4:1.00] +; SLM-NEXT: negb %dil # sched: [1:0.50] +; SLM-NEXT: negb (%r8) # sched: [4:2.00] +; SLM-NEXT: negw %si # sched: [1:0.50] +; SLM-NEXT: negw (%r9) # sched: [4:2.00] +; SLM-NEXT: negl %edx # sched: [1:0.50] +; SLM-NEXT: negl (%rax) # sched: [4:2.00] +; SLM-NEXT: negq %rcx # sched: [1:0.50] +; SLM-NEXT: negq (%r10) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_or_16: +; SANDY-LABEL: test_neg: ; SANDY: # %bb.0: +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: orw $511, %ax # imm = 0x1FF -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: orw $511, %di # imm = 0x1FF -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: orw $511, (%rsi) # imm = 0x1FF -; SANDY-NEXT: # sched: [7:1.00] -; SANDY-NEXT: orw $7, %di # sched: [1:0.33] -; SANDY-NEXT: orw $7, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: orw %di, %di # sched: [1:0.33] -; SANDY-NEXT: orw %di, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: orw (%rsi), %di # sched: [6:0.50] +; SANDY-NEXT: negb %dil # sched: [1:0.33] +; SANDY-NEXT: negb (%r8) # sched: [7:1.00] +; SANDY-NEXT: negw %si # sched: [1:0.33] +; SANDY-NEXT: negw (%r9) # sched: [7:1.00] +; SANDY-NEXT: negl %edx # sched: [1:0.33] +; SANDY-NEXT: negl (%rax) # sched: [7:1.00] +; SANDY-NEXT: negq %rcx # sched: [1:0.33] +; SANDY-NEXT: negq (%r10) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_or_16: +; HASWELL-LABEL: test_neg: ; HASWELL: # %bb.0: +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: orw $511, %ax # imm = 0x1FF -; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: orw $511, %di # imm = 0x1FF -; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: orw $511, (%rsi) # imm = 0x1FF -; HASWELL-NEXT: # sched: [7:1.00] -; HASWELL-NEXT: orw $7, %di # sched: [1:0.25] -; HASWELL-NEXT: orw $7, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: orw %di, %di # sched: [1:0.25] -; HASWELL-NEXT: orw %di, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: orw (%rsi), %di # sched: [6:0.50] +; HASWELL-NEXT: negb %dil # sched: [1:0.25] +; HASWELL-NEXT: negb (%r8) # sched: [7:1.00] +; HASWELL-NEXT: negw %si # sched: [1:0.25] +; HASWELL-NEXT: negw (%r9) # sched: [7:1.00] +; HASWELL-NEXT: negl %edx # sched: [1:0.25] +; HASWELL-NEXT: negl (%rax) # sched: [7:1.00] +; HASWELL-NEXT: negq %rcx # sched: [1:0.25] +; HASWELL-NEXT: negq (%r10) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_or_16: +; BROADWELL-LABEL: test_neg: ; BROADWELL: # %bb.0: +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: orw $511, %ax # imm = 0x1FF -; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: orw $511, %di # imm = 0x1FF -; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: orw $511, (%rsi) # imm = 0x1FF -; BROADWELL-NEXT: # sched: [6:1.00] -; BROADWELL-NEXT: orw $7, %di # sched: [1:0.25] -; BROADWELL-NEXT: orw $7, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: orw %di, %di # sched: [1:0.25] -; BROADWELL-NEXT: orw %di, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: orw (%rsi), %di # sched: [6:0.50] +; BROADWELL-NEXT: negb %dil # sched: [1:0.25] +; BROADWELL-NEXT: negb (%r8) # sched: [6:1.00] +; BROADWELL-NEXT: negw %si # sched: [1:0.25] +; BROADWELL-NEXT: negw (%r9) # sched: [6:1.00] +; BROADWELL-NEXT: negl %edx # sched: [1:0.25] +; BROADWELL-NEXT: negl (%rax) # sched: [6:1.00] +; BROADWELL-NEXT: negq %rcx # sched: [1:0.25] +; BROADWELL-NEXT: negq (%r10) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_or_16: +; SKYLAKE-LABEL: test_neg: ; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: orw $511, %ax # imm = 0x1FF -; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: orw $511, %di # imm = 0x1FF -; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: orw $511, (%rsi) # imm = 0x1FF -; SKYLAKE-NEXT: # sched: [6:1.00] -; SKYLAKE-NEXT: orw $7, %di # sched: [1:0.25] -; SKYLAKE-NEXT: orw $7, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: orw %di, %di # sched: [1:0.25] -; SKYLAKE-NEXT: orw %di, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: orw (%rsi), %di # sched: [6:0.50] +; SKYLAKE-NEXT: negb %dil # sched: [1:0.25] +; SKYLAKE-NEXT: negb (%r8) # sched: [6:1.00] +; SKYLAKE-NEXT: negw %si # sched: [1:0.25] +; SKYLAKE-NEXT: negw (%r9) # sched: [6:1.00] +; SKYLAKE-NEXT: negl %edx # sched: [1:0.25] +; SKYLAKE-NEXT: negl (%rax) # sched: [6:1.00] +; SKYLAKE-NEXT: negq %rcx # sched: [1:0.25] +; SKYLAKE-NEXT: negq (%r10) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_or_16: +; SKX-LABEL: test_neg: ; SKX: # %bb.0: +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: orw $511, %ax # imm = 0x1FF -; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: orw $511, %di # imm = 0x1FF -; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: orw $511, (%rsi) # imm = 0x1FF -; SKX-NEXT: # sched: [6:1.00] -; SKX-NEXT: orw $7, %di # sched: [1:0.25] -; SKX-NEXT: orw $7, (%rsi) # sched: [6:1.00] -; SKX-NEXT: orw %di, %di # sched: [1:0.25] -; SKX-NEXT: orw %di, (%rsi) # sched: [6:1.00] -; SKX-NEXT: orw (%rsi), %di # sched: [6:0.50] +; SKX-NEXT: negb %dil # sched: [1:0.25] +; SKX-NEXT: negb (%r8) # sched: [6:1.00] +; SKX-NEXT: negw %si # sched: [1:0.25] +; SKX-NEXT: negw (%r9) # sched: [6:1.00] +; SKX-NEXT: negl %edx # sched: [1:0.25] +; SKX-NEXT: negl (%rax) # sched: [6:1.00] +; SKX-NEXT: negq %rcx # sched: [1:0.25] +; SKX-NEXT: negq (%r10) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_or_16: +; BTVER2-LABEL: test_neg: ; BTVER2: # %bb.0: +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: orw $511, %ax # imm = 0x1FF -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: orw $511, %di # imm = 0x1FF -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: orw $511, (%rsi) # imm = 0x1FF -; BTVER2-NEXT: # sched: [4:1.00] -; BTVER2-NEXT: orw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: orw $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: orw %di, %di # sched: [1:0.50] -; BTVER2-NEXT: orw %di, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: orw (%rsi), %di # sched: [4:1.00] +; BTVER2-NEXT: negb %dil # sched: [1:0.50] +; BTVER2-NEXT: negb (%r8) # sched: [4:1.00] +; BTVER2-NEXT: negw %si # sched: [1:0.50] +; BTVER2-NEXT: negw (%r9) # sched: [4:1.00] +; BTVER2-NEXT: negl %edx # sched: [1:0.50] +; BTVER2-NEXT: negl (%rax) # sched: [4:1.00] +; BTVER2-NEXT: negq %rcx # sched: [1:0.50] +; BTVER2-NEXT: negq (%r10) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_or_16: +; ZNVER1-LABEL: test_neg: ; ZNVER1: # %bb.0: +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: orw $511, %ax # imm = 0x1FF -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: orw $511, %di # imm = 0x1FF -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: orw $511, (%rsi) # imm = 0x1FF -; ZNVER1-NEXT: # sched: [5:0.50] -; ZNVER1-NEXT: orw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: orw $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: orw %di, %di # sched: [1:0.25] -; ZNVER1-NEXT: orw %di, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: orw (%rsi), %di # sched: [5:0.50] +; ZNVER1-NEXT: negb %dil # sched: [1:0.25] +; ZNVER1-NEXT: negb (%r8) # sched: [5:0.50] +; ZNVER1-NEXT: negw %si # sched: [1:0.25] +; ZNVER1-NEXT: negw (%r9) # sched: [5:0.50] +; ZNVER1-NEXT: negl %edx # sched: [1:0.25] +; ZNVER1-NEXT: negl (%rax) # sched: [5:0.50] +; ZNVER1-NEXT: negq %rcx # sched: [1:0.25] +; ZNVER1-NEXT: negq (%r10) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "orw $2, %AX \0A\09 orw $2, $0 \0A\09 orw $2, $1 \0A\09 orw $3, $0 \0A\09 orw $3, $1 \0A\09 orw $0, $0 \0A\09 orw $0, $1 \0A\09 orw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind + tail call void asm "negb $0 \0A\09 negb $4 \0A\09 negw $1 \0A\09 negw $5 \0A\09 negl $2 \0A\09 negl $6 \0A\09 negq $3 \0A\09 negq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind ret void } -define void @test_or_32(i32 %a0, i32* %a1) optsize { -; GENERIC-LABEL: test_or_32: + +define void @test_nop(i16 %a0, i32 %a1, i64 %a2, i16 *%p0, i32 *%p1, i64 *%p2) optsize { +; GENERIC-LABEL: test_nop: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: orl $665536, %eax # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: orl $665536, %edi # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [7:1.00] -; GENERIC-NEXT: orl $7, %edi # sched: [1:0.33] -; GENERIC-NEXT: orl $7, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: orl %edi, %edi # sched: [1:0.33] -; GENERIC-NEXT: orl %edi, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: orl (%rsi), %edi # sched: [6:0.50] +; GENERIC-NEXT: nop # sched: [1:?] +; GENERIC-NEXT: nopw %di # sched: [1:?] +; GENERIC-NEXT: nopw (%rcx) # sched: [1:?] +; GENERIC-NEXT: nopl %esi # sched: [1:?] +; GENERIC-NEXT: nopl (%r8) # sched: [1:?] +; GENERIC-NEXT: nopq %rdx # sched: [1:?] +; GENERIC-NEXT: nopq (%r9) # sched: [1:?] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_or_32: +; ATOM-LABEL: test_nop: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: orl $665536, %eax # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: orl $665536, %edi # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:1.00] -; ATOM-NEXT: orl $7, %edi # sched: [1:0.50] -; ATOM-NEXT: orl $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: orl %edi, %edi # sched: [1:0.50] -; ATOM-NEXT: orl %edi, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: orl (%rsi), %edi # sched: [1:1.00] +; ATOM-NEXT: nop # sched: [1:0.50] +; ATOM-NEXT: nopw %di # sched: [1:0.50] +; ATOM-NEXT: nopw (%rcx) # sched: [1:0.50] +; ATOM-NEXT: nopl %esi # sched: [1:0.50] +; ATOM-NEXT: nopl (%r8) # sched: [1:0.50] +; ATOM-NEXT: nopq %rdx # sched: [1:0.50] +; ATOM-NEXT: nopq (%r9) # sched: [1:0.50] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_or_32: +; SLM-LABEL: test_nop: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: orl $665536, %eax # imm = 0xA27C0 -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: orl $665536, %edi # imm = 0xA27C0 -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; SLM-NEXT: # sched: [4:2.00] -; SLM-NEXT: orl $7, %edi # sched: [1:0.50] -; SLM-NEXT: orl $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: orl %edi, %edi # sched: [1:0.50] -; SLM-NEXT: orl %edi, (%rsi) # sched: [4:2.00] -; SLM-NEXT: orl (%rsi), %edi # sched: [4:1.00] +; SLM-NEXT: nop # sched: [1:?] +; SLM-NEXT: nopw %di # sched: [1:?] +; SLM-NEXT: nopw (%rcx) # sched: [1:?] +; SLM-NEXT: nopl %esi # sched: [1:?] +; SLM-NEXT: nopl (%r8) # sched: [1:?] +; SLM-NEXT: nopq %rdx # sched: [1:?] +; SLM-NEXT: nopq (%r9) # sched: [1:?] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_or_32: +; SANDY-LABEL: test_nop: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: orl $665536, %eax # imm = 0xA27C0 -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: orl $665536, %edi # imm = 0xA27C0 -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; SANDY-NEXT: # sched: [7:1.00] -; SANDY-NEXT: orl $7, %edi # sched: [1:0.33] -; SANDY-NEXT: orl $7, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: orl %edi, %edi # sched: [1:0.33] -; SANDY-NEXT: orl %edi, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: orl (%rsi), %edi # sched: [6:0.50] +; SANDY-NEXT: nop # sched: [1:?] +; SANDY-NEXT: nopw %di # sched: [1:?] +; SANDY-NEXT: nopw (%rcx) # sched: [1:?] +; SANDY-NEXT: nopl %esi # sched: [1:?] +; SANDY-NEXT: nopl (%r8) # sched: [1:?] +; SANDY-NEXT: nopq %rdx # sched: [1:?] +; SANDY-NEXT: nopq (%r9) # sched: [1:?] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_or_32: +; HASWELL-LABEL: test_nop: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: orl $665536, %eax # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: orl $665536, %edi # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [7:1.00] -; HASWELL-NEXT: orl $7, %edi # sched: [1:0.25] -; HASWELL-NEXT: orl $7, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: orl %edi, %edi # sched: [1:0.25] -; HASWELL-NEXT: orl %edi, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: orl (%rsi), %edi # sched: [6:0.50] +; HASWELL-NEXT: nop # sched: [1:0.25] +; HASWELL-NEXT: nopw %di # sched: [1:0.25] +; HASWELL-NEXT: nopw (%rcx) # sched: [1:0.25] +; HASWELL-NEXT: nopl %esi # sched: [1:0.25] +; HASWELL-NEXT: nopl (%r8) # sched: [1:0.25] +; HASWELL-NEXT: nopq %rdx # sched: [1:0.25] +; HASWELL-NEXT: nopq (%r9) # sched: [1:0.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_or_32: +; BROADWELL-LABEL: test_nop: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: orl $665536, %eax # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: orl $665536, %edi # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [6:1.00] -; BROADWELL-NEXT: orl $7, %edi # sched: [1:0.25] -; BROADWELL-NEXT: orl $7, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: orl %edi, %edi # sched: [1:0.25] -; BROADWELL-NEXT: orl %edi, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: orl (%rsi), %edi # sched: [6:0.50] +; BROADWELL-NEXT: nop # sched: [1:0.25] +; BROADWELL-NEXT: nopw %di # sched: [1:0.25] +; BROADWELL-NEXT: nopw (%rcx) # sched: [1:0.25] +; BROADWELL-NEXT: nopl %esi # sched: [1:0.25] +; BROADWELL-NEXT: nopl (%r8) # sched: [1:0.25] +; BROADWELL-NEXT: nopq %rdx # sched: [1:0.25] +; BROADWELL-NEXT: nopq (%r9) # sched: [1:0.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_or_32: +; SKYLAKE-LABEL: test_nop: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: orl $665536, %eax # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: orl $665536, %edi # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [6:1.00] -; SKYLAKE-NEXT: orl $7, %edi # sched: [1:0.25] -; SKYLAKE-NEXT: orl $7, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: orl %edi, %edi # sched: [1:0.25] -; SKYLAKE-NEXT: orl %edi, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: orl (%rsi), %edi # sched: [6:0.50] +; SKYLAKE-NEXT: nop # sched: [1:0.25] +; SKYLAKE-NEXT: nopw %di # sched: [1:0.25] +; SKYLAKE-NEXT: nopw (%rcx) # sched: [1:0.25] +; SKYLAKE-NEXT: nopl %esi # sched: [1:0.25] +; SKYLAKE-NEXT: nopl (%r8) # sched: [1:0.25] +; SKYLAKE-NEXT: nopq %rdx # sched: [1:0.25] +; SKYLAKE-NEXT: nopq (%r9) # sched: [1:0.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_or_32: +; SKX-LABEL: test_nop: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: orl $665536, %eax # imm = 0xA27C0 -; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: orl $665536, %edi # imm = 0xA27C0 -; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; SKX-NEXT: # sched: [6:1.00] -; SKX-NEXT: orl $7, %edi # sched: [1:0.25] -; SKX-NEXT: orl $7, (%rsi) # sched: [6:1.00] -; SKX-NEXT: orl %edi, %edi # sched: [1:0.25] -; SKX-NEXT: orl %edi, (%rsi) # sched: [6:1.00] -; SKX-NEXT: orl (%rsi), %edi # sched: [6:0.50] +; SKX-NEXT: nop # sched: [1:0.25] +; SKX-NEXT: nopw %di # sched: [1:0.25] +; SKX-NEXT: nopw (%rcx) # sched: [1:0.25] +; SKX-NEXT: nopl %esi # sched: [1:0.25] +; SKX-NEXT: nopl (%r8) # sched: [1:0.25] +; SKX-NEXT: nopq %rdx # sched: [1:0.25] +; SKX-NEXT: nopq (%r9) # sched: [1:0.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_or_32: +; BTVER2-LABEL: test_nop: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: orl $665536, %eax # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: orl $665536, %edi # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [4:1.00] -; BTVER2-NEXT: orl $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: orl $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: orl %edi, %edi # sched: [1:0.50] -; BTVER2-NEXT: orl %edi, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: orl (%rsi), %edi # sched: [4:1.00] +; BTVER2-NEXT: nop # sched: [1:?] +; BTVER2-NEXT: nopw %di # sched: [1:?] +; BTVER2-NEXT: nopw (%rcx) # sched: [1:?] +; BTVER2-NEXT: nopl %esi # sched: [1:?] +; BTVER2-NEXT: nopl (%r8) # sched: [1:?] +; BTVER2-NEXT: nopq %rdx # sched: [1:?] +; BTVER2-NEXT: nopq (%r9) # sched: [1:?] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_or_32: +; ZNVER1-LABEL: test_nop: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: orl $665536, %eax # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: orl $665536, %edi # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [5:0.50] -; ZNVER1-NEXT: orl $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: orl $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: orl %edi, %edi # sched: [1:0.25] -; ZNVER1-NEXT: orl %edi, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: orl (%rsi), %edi # sched: [5:0.50] +; ZNVER1-NEXT: nop # sched: [1:?] +; ZNVER1-NEXT: nopw %di # sched: [1:?] +; ZNVER1-NEXT: nopw (%rcx) # sched: [1:?] +; ZNVER1-NEXT: nopl %esi # sched: [1:?] +; ZNVER1-NEXT: nopl (%r8) # sched: [1:?] +; ZNVER1-NEXT: nopq %rdx # sched: [1:?] +; ZNVER1-NEXT: nopq (%r9) # sched: [1:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "orl $2, %EAX \0A\09 orl $2, $0 \0A\09 orl $2, $1 \0A\09 orl $3, $0 \0A\09 orl $3, $1 \0A\09 orl $0, $0 \0A\09 orl $0, $1 \0A\09 orl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind + tail call void asm "nop \0A\09 nopw $0 \0A\09 nopw $3 \0A\09 nopl $1 \0A\09 nopl $4 \0A\09 nopq $2 \0A\09 nopq $5", "r,r,r,*m,*m,*m"(i16 %a0, i32 %a1, i64 %a2, i16 *%p0, i32 *%p1, i64 *%p2) nounwind ret void } -define void @test_or_64(i64 %a0, i64* %a1) optsize { -; GENERIC-LABEL: test_or_64: + +define void @test_not(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize { +; GENERIC-LABEL: test_not: ; GENERIC: # %bb.0: +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; GENERIC-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; GENERIC-NEXT: #APP -; GENERIC-NEXT: orq $665536, %rax # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [7:1.00] -; GENERIC-NEXT: orq $7, %rdi # sched: [1:0.33] -; GENERIC-NEXT: orq $7, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: orq %rdi, %rdi # sched: [1:0.33] -; GENERIC-NEXT: orq %rdi, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: orq (%rsi), %rdi # sched: [6:0.50] +; GENERIC-NEXT: notb %dil # sched: [1:0.33] +; GENERIC-NEXT: notb (%r8) # sched: [7:1.00] +; GENERIC-NEXT: notw %si # sched: [1:0.33] +; GENERIC-NEXT: notw (%r9) # sched: [7:1.00] +; GENERIC-NEXT: notl %edx # sched: [1:0.33] +; GENERIC-NEXT: notl (%rax) # sched: [7:1.00] +; GENERIC-NEXT: notq %rcx # sched: [1:0.33] +; GENERIC-NEXT: notq (%r10) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_or_64: +; ATOM-LABEL: test_not: ; ATOM: # %bb.0: +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00] +; ATOM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00] ; ATOM-NEXT: #APP -; ATOM-NEXT: orq $665536, %rax # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:1.00] -; ATOM-NEXT: orq $7, %rdi # sched: [1:0.50] -; ATOM-NEXT: orq $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: orq %rdi, %rdi # sched: [1:0.50] -; ATOM-NEXT: orq %rdi, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: orq (%rsi), %rdi # sched: [1:1.00] +; ATOM-NEXT: notb %dil # sched: [1:0.50] +; ATOM-NEXT: notb (%r8) # sched: [1:1.00] +; ATOM-NEXT: notw %si # sched: [1:0.50] +; ATOM-NEXT: notw (%r9) # sched: [1:1.00] +; ATOM-NEXT: notl %edx # sched: [1:0.50] +; ATOM-NEXT: notl (%rax) # sched: [1:1.00] +; ATOM-NEXT: notq %rcx # sched: [1:0.50] +; ATOM-NEXT: notq (%r10) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_or_64: +; SLM-LABEL: test_not: ; SLM: # %bb.0: +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00] +; SLM-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00] ; SLM-NEXT: #APP -; SLM-NEXT: orq $665536, %rax # imm = 0xA27C0 -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; SLM-NEXT: # sched: [4:2.00] -; SLM-NEXT: orq $7, %rdi # sched: [1:0.50] -; SLM-NEXT: orq $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: orq %rdi, %rdi # sched: [1:0.50] -; SLM-NEXT: orq %rdi, (%rsi) # sched: [4:2.00] -; SLM-NEXT: orq (%rsi), %rdi # sched: [4:1.00] +; SLM-NEXT: notb %dil # sched: [1:0.50] +; SLM-NEXT: notb (%r8) # sched: [4:2.00] +; SLM-NEXT: notw %si # sched: [1:0.50] +; SLM-NEXT: notw (%r9) # sched: [4:2.00] +; SLM-NEXT: notl %edx # sched: [1:0.50] +; SLM-NEXT: notl (%rax) # sched: [4:2.00] +; SLM-NEXT: notq %rcx # sched: [1:0.50] +; SLM-NEXT: notq (%r10) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_or_64: +; SANDY-LABEL: test_not: ; SANDY: # %bb.0: +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SANDY-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SANDY-NEXT: #APP -; SANDY-NEXT: orq $665536, %rax # imm = 0xA27C0 -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; SANDY-NEXT: # sched: [7:1.00] -; SANDY-NEXT: orq $7, %rdi # sched: [1:0.33] -; SANDY-NEXT: orq $7, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: orq %rdi, %rdi # sched: [1:0.33] -; SANDY-NEXT: orq %rdi, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: orq (%rsi), %rdi # sched: [6:0.50] +; SANDY-NEXT: notb %dil # sched: [1:0.33] +; SANDY-NEXT: notb (%r8) # sched: [7:1.00] +; SANDY-NEXT: notw %si # sched: [1:0.33] +; SANDY-NEXT: notw (%r9) # sched: [7:1.00] +; SANDY-NEXT: notl %edx # sched: [1:0.33] +; SANDY-NEXT: notl (%rax) # sched: [7:1.00] +; SANDY-NEXT: notq %rcx # sched: [1:0.33] +; SANDY-NEXT: notq (%r10) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_or_64: +; HASWELL-LABEL: test_not: ; HASWELL: # %bb.0: +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; HASWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; HASWELL-NEXT: #APP -; HASWELL-NEXT: orq $665536, %rax # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [7:1.00] -; HASWELL-NEXT: orq $7, %rdi # sched: [1:0.25] -; HASWELL-NEXT: orq $7, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: orq %rdi, %rdi # sched: [1:0.25] -; HASWELL-NEXT: orq %rdi, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: orq (%rsi), %rdi # sched: [6:0.50] +; HASWELL-NEXT: notb %dil # sched: [1:0.25] +; HASWELL-NEXT: notb (%r8) # sched: [7:1.00] +; HASWELL-NEXT: notw %si # sched: [1:0.25] +; HASWELL-NEXT: notw (%r9) # sched: [7:1.00] +; HASWELL-NEXT: notl %edx # sched: [1:0.25] +; HASWELL-NEXT: notl (%rax) # sched: [7:1.00] +; HASWELL-NEXT: notq %rcx # sched: [1:0.25] +; HASWELL-NEXT: notq (%r10) # sched: [7:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_or_64: +; BROADWELL-LABEL: test_not: ; BROADWELL: # %bb.0: +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; BROADWELL-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: orq $665536, %rax # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [6:1.00] -; BROADWELL-NEXT: orq $7, %rdi # sched: [1:0.25] -; BROADWELL-NEXT: orq $7, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: orq %rdi, %rdi # sched: [1:0.25] -; BROADWELL-NEXT: orq %rdi, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: orq (%rsi), %rdi # sched: [6:0.50] +; BROADWELL-NEXT: notb %dil # sched: [1:0.25] +; BROADWELL-NEXT: notb (%r8) # sched: [6:1.00] +; BROADWELL-NEXT: notw %si # sched: [1:0.25] +; BROADWELL-NEXT: notw (%r9) # sched: [6:1.00] +; BROADWELL-NEXT: notl %edx # sched: [1:0.25] +; BROADWELL-NEXT: notl (%rax) # sched: [6:1.00] +; BROADWELL-NEXT: notq %rcx # sched: [1:0.25] +; BROADWELL-NEXT: notq (%r10) # sched: [6:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_or_64: +; SKYLAKE-LABEL: test_not: ; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKYLAKE-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: orq $665536, %rax # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [6:1.00] -; SKYLAKE-NEXT: orq $7, %rdi # sched: [1:0.25] -; SKYLAKE-NEXT: orq $7, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: orq %rdi, %rdi # sched: [1:0.25] -; SKYLAKE-NEXT: orq %rdi, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: orq (%rsi), %rdi # sched: [6:0.50] +; SKYLAKE-NEXT: notb %dil # sched: [1:0.25] +; SKYLAKE-NEXT: notb (%r8) # sched: [6:1.00] +; SKYLAKE-NEXT: notw %si # sched: [1:0.25] +; SKYLAKE-NEXT: notw (%r9) # sched: [6:1.00] +; SKYLAKE-NEXT: notl %edx # sched: [1:0.25] +; SKYLAKE-NEXT: notl (%rax) # sched: [6:1.00] +; SKYLAKE-NEXT: notq %rcx # sched: [1:0.25] +; SKYLAKE-NEXT: notq (%r10) # sched: [6:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_or_64: +; SKX-LABEL: test_not: ; SKX: # %bb.0: +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50] +; SKX-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50] ; SKX-NEXT: #APP -; SKX-NEXT: orq $665536, %rax # imm = 0xA27C0 -; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; SKX-NEXT: # sched: [6:1.00] -; SKX-NEXT: orq $7, %rdi # sched: [1:0.25] -; SKX-NEXT: orq $7, (%rsi) # sched: [6:1.00] -; SKX-NEXT: orq %rdi, %rdi # sched: [1:0.25] -; SKX-NEXT: orq %rdi, (%rsi) # sched: [6:1.00] -; SKX-NEXT: orq (%rsi), %rdi # sched: [6:0.50] +; SKX-NEXT: notb %dil # sched: [1:0.25] +; SKX-NEXT: notb (%r8) # sched: [6:1.00] +; SKX-NEXT: notw %si # sched: [1:0.25] +; SKX-NEXT: notw (%r9) # sched: [6:1.00] +; SKX-NEXT: notl %edx # sched: [1:0.25] +; SKX-NEXT: notl (%rax) # sched: [6:1.00] +; SKX-NEXT: notq %rcx # sched: [1:0.25] +; SKX-NEXT: notq (%r10) # sched: [6:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_or_64: +; BTVER2-LABEL: test_not: ; BTVER2: # %bb.0: +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00] +; BTVER2-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: orq $665536, %rax # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [4:1.00] -; BTVER2-NEXT: orq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: orq $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: orq %rdi, %rdi # sched: [1:0.50] -; BTVER2-NEXT: orq %rdi, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: orq (%rsi), %rdi # sched: [4:1.00] +; BTVER2-NEXT: notb %dil # sched: [1:0.50] +; BTVER2-NEXT: notb (%r8) # sched: [4:1.00] +; BTVER2-NEXT: notw %si # sched: [1:0.50] +; BTVER2-NEXT: notw (%r9) # sched: [4:1.00] +; BTVER2-NEXT: notl %edx # sched: [1:0.50] +; BTVER2-NEXT: notl (%rax) # sched: [4:1.00] +; BTVER2-NEXT: notq %rcx # sched: [1:0.50] +; BTVER2-NEXT: notq (%r10) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_or_64: +; ZNVER1-LABEL: test_not: ; ZNVER1: # %bb.0: +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50] +; ZNVER1-NEXT: movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50] ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: orq $665536, %rax # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: orq $665536, %rdi # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [5:0.50] -; ZNVER1-NEXT: orq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: orq $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: orq %rdi, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: orq %rdi, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: orq (%rsi), %rdi # sched: [5:0.50] +; ZNVER1-NEXT: notb %dil # sched: [1:0.25] +; ZNVER1-NEXT: notb (%r8) # sched: [5:0.50] +; ZNVER1-NEXT: notw %si # sched: [1:0.25] +; ZNVER1-NEXT: notw (%r9) # sched: [5:0.50] +; ZNVER1-NEXT: notl %edx # sched: [1:0.25] +; ZNVER1-NEXT: notl (%rax) # sched: [5:0.50] +; ZNVER1-NEXT: notq %rcx # sched: [1:0.25] +; ZNVER1-NEXT: notq (%r10) # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "orq $2, %RAX \0A\09 orq $2, $0 \0A\09 orq $2, $1 \0A\09 orq $3, $0 \0A\09 orq $3, $1 \0A\09 orq $0, $0 \0A\09 orq $0, $1 \0A\09 orq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind + tail call void asm "notb $0 \0A\09 notb $4 \0A\09 notw $1 \0A\09 notw $5 \0A\09 notl $2 \0A\09 notl $6 \0A\09 notq $3 \0A\09 notq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind ret void } -define void @test_out() optsize { -; GENERIC-LABEL: test_out: +define void @test_or_8(i8 %a0, i8* %a1) optsize { +; GENERIC-LABEL: test_or_8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: outb %al, $7 # sched: [4:1.33] -; GENERIC-NEXT: outw %ax, $7 # sched: [100:0.33] -; GENERIC-NEXT: outl %eax, $7 # sched: [4:1.33] -; GENERIC-NEXT: outb %al, %dx # sched: [3:1.00] -; GENERIC-NEXT: outw %ax, %dx # sched: [100:0.33] -; GENERIC-NEXT: outl %eax, %dx # sched: [3:1.00] +; GENERIC-NEXT: orb $7, %al # sched: [1:0.33] +; GENERIC-NEXT: orb $7, %dil # sched: [1:0.33] +; GENERIC-NEXT: orb $7, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: orb %dil, %dil # sched: [1:0.33] +; GENERIC-NEXT: orb %dil, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: orb (%rsi), %dil # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_out: +; ATOM-LABEL: test_or_8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: outb %al, $7 # sched: [72:36.00] -; ATOM-NEXT: outw %ax, $7 # sched: [72:36.00] -; ATOM-NEXT: outl %eax, $7 # sched: [72:36.00] -; ATOM-NEXT: outb %al, %dx # sched: [68:34.00] -; ATOM-NEXT: outw %ax, %dx # sched: [68:34.00] -; ATOM-NEXT: outl %eax, %dx # sched: [68:34.00] +; ATOM-NEXT: orb $7, %al # sched: [1:0.50] +; ATOM-NEXT: orb $7, %dil # sched: [1:0.50] +; ATOM-NEXT: orb $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: orb %dil, %dil # sched: [1:0.50] +; ATOM-NEXT: orb %dil, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: orb (%rsi), %dil # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_out: +; SLM-LABEL: test_or_8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: outb %al, $7 # sched: [100:1.00] -; SLM-NEXT: outw %ax, $7 # sched: [100:1.00] -; SLM-NEXT: outl %eax, $7 # sched: [100:1.00] -; SLM-NEXT: outb %al, %dx # sched: [100:1.00] -; SLM-NEXT: outw %ax, %dx # sched: [100:1.00] -; SLM-NEXT: outl %eax, %dx # sched: [100:1.00] +; SLM-NEXT: orb $7, %al # sched: [1:0.50] +; SLM-NEXT: orb $7, %dil # sched: [1:0.50] +; SLM-NEXT: orb $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: orb %dil, %dil # sched: [1:0.50] +; SLM-NEXT: orb %dil, (%rsi) # sched: [4:2.00] +; SLM-NEXT: orb (%rsi), %dil # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_out: +; SANDY-LABEL: test_or_8: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: outb %al, $7 # sched: [4:1.33] -; SANDY-NEXT: outw %ax, $7 # sched: [100:0.33] -; SANDY-NEXT: outl %eax, $7 # sched: [4:1.33] -; SANDY-NEXT: outb %al, %dx # sched: [3:1.00] -; SANDY-NEXT: outw %ax, %dx # sched: [100:0.33] -; SANDY-NEXT: outl %eax, %dx # sched: [3:1.00] +; SANDY-NEXT: orb $7, %al # sched: [1:0.33] +; SANDY-NEXT: orb $7, %dil # sched: [1:0.33] +; SANDY-NEXT: orb $7, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: orb %dil, %dil # sched: [1:0.33] +; SANDY-NEXT: orb %dil, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: orb (%rsi), %dil # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_out: +; HASWELL-LABEL: test_or_8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: outb %al, $7 # sched: [36:5.00] -; HASWELL-NEXT: outw %ax, $7 # sched: [36:5.00] -; HASWELL-NEXT: outl %eax, $7 # sched: [36:5.00] -; HASWELL-NEXT: outb %al, %dx # sched: [36:5.00] -; HASWELL-NEXT: outw %ax, %dx # sched: [36:5.00] -; HASWELL-NEXT: outl %eax, %dx # sched: [36:5.00] +; HASWELL-NEXT: orb $7, %al # sched: [1:0.25] +; HASWELL-NEXT: orb $7, %dil # sched: [1:0.25] +; HASWELL-NEXT: orb $7, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: orb %dil, %dil # sched: [1:0.25] +; HASWELL-NEXT: orb %dil, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: orb (%rsi), %dil # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_out: +; BROADWELL-LABEL: test_or_8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: outb %al, $7 # sched: [35:5.00] -; BROADWELL-NEXT: outw %ax, $7 # sched: [35:5.00] -; BROADWELL-NEXT: outl %eax, $7 # sched: [35:5.00] -; BROADWELL-NEXT: outb %al, %dx # sched: [35:5.00] -; BROADWELL-NEXT: outw %ax, %dx # sched: [35:5.00] -; BROADWELL-NEXT: outl %eax, %dx # sched: [35:5.00] +; BROADWELL-NEXT: orb $7, %al # sched: [1:0.25] +; BROADWELL-NEXT: orb $7, %dil # sched: [1:0.25] +; BROADWELL-NEXT: orb $7, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: orb %dil, %dil # sched: [1:0.25] +; BROADWELL-NEXT: orb %dil, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: orb (%rsi), %dil # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_out: +; SKYLAKE-LABEL: test_or_8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: outb %al, $7 # sched: [35:5.00] -; SKYLAKE-NEXT: outw %ax, $7 # sched: [35:5.00] -; SKYLAKE-NEXT: outl %eax, $7 # sched: [35:5.00] -; SKYLAKE-NEXT: outb %al, %dx # sched: [35:5.00] -; SKYLAKE-NEXT: outw %ax, %dx # sched: [35:5.00] -; SKYLAKE-NEXT: outl %eax, %dx # sched: [35:5.00] +; SKYLAKE-NEXT: orb $7, %al # sched: [1:0.25] +; SKYLAKE-NEXT: orb $7, %dil # sched: [1:0.25] +; SKYLAKE-NEXT: orb $7, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: orb %dil, %dil # sched: [1:0.25] +; SKYLAKE-NEXT: orb %dil, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: orb (%rsi), %dil # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_out: +; SKX-LABEL: test_or_8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: outb %al, $7 # sched: [35:5.00] -; SKX-NEXT: outw %ax, $7 # sched: [35:5.00] -; SKX-NEXT: outl %eax, $7 # sched: [35:5.00] -; SKX-NEXT: outb %al, %dx # sched: [35:5.00] -; SKX-NEXT: outw %ax, %dx # sched: [35:5.00] -; SKX-NEXT: outl %eax, %dx # sched: [35:5.00] +; SKX-NEXT: orb $7, %al # sched: [1:0.25] +; SKX-NEXT: orb $7, %dil # sched: [1:0.25] +; SKX-NEXT: orb $7, (%rsi) # sched: [6:1.00] +; SKX-NEXT: orb %dil, %dil # sched: [1:0.25] +; SKX-NEXT: orb %dil, (%rsi) # sched: [6:1.00] +; SKX-NEXT: orb (%rsi), %dil # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_out: +; BTVER2-LABEL: test_or_8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: outb %al, $7 # sched: [100:0.17] -; BTVER2-NEXT: outw %ax, $7 # sched: [100:0.17] -; BTVER2-NEXT: outl %eax, $7 # sched: [100:0.17] -; BTVER2-NEXT: outb %al, %dx # sched: [100:0.17] -; BTVER2-NEXT: outw %ax, %dx # sched: [100:0.17] -; BTVER2-NEXT: outl %eax, %dx # sched: [100:0.17] +; BTVER2-NEXT: orb $7, %al # sched: [1:0.50] +; BTVER2-NEXT: orb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: orb $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: orb %dil, %dil # sched: [1:0.50] +; BTVER2-NEXT: orb %dil, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: orb (%rsi), %dil # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_out: +; ZNVER1-LABEL: test_or_8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: outb %al, $7 # sched: [100:?] -; ZNVER1-NEXT: outw %ax, $7 # sched: [100:?] -; ZNVER1-NEXT: outl %eax, $7 # sched: [100:?] -; ZNVER1-NEXT: outb %al, %dx # sched: [100:?] -; ZNVER1-NEXT: outw %ax, %dx # sched: [100:?] -; ZNVER1-NEXT: outl %eax, %dx # sched: [100:?] +; ZNVER1-NEXT: orb $7, %al # sched: [1:0.25] +; ZNVER1-NEXT: orb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: orb $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: orb %dil, %dil # sched: [1:0.25] +; ZNVER1-NEXT: orb %dil, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: orb (%rsi), %dil # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "outb %AL, $0 \0A\09 outw %AX, $0 \0A\09 outl %EAX, $0 \0A\09 outb %AL, %DX \0A\09 outw %AX, %DX \0A\09 outl %EAX, %DX", "i"(i8 7) nounwind + tail call void asm "orb $2, %AL \0A\09 orb $2, $0 \0A\09 orb $2, $1 \0A\09 orb $0, $0 \0A\09 orb $0, $1 \0A\09 orb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind ret void } - -define void @test_outs() optsize { -; GENERIC-LABEL: test_outs: +define void @test_or_16(i16 %a0, i16* %a1) optsize { +; GENERIC-LABEL: test_or_16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: outsb (%rsi), %dx # sched: [100:0.33] -; GENERIC-NEXT: outsw (%rsi), %dx # sched: [100:0.33] -; GENERIC-NEXT: outsl (%rsi), %dx # sched: [100:0.33] +; GENERIC-NEXT: orw $511, %ax # imm = 0x1FF +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: orw $511, %di # imm = 0x1FF +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: orw $511, (%rsi) # imm = 0x1FF +; GENERIC-NEXT: # sched: [7:1.00] +; GENERIC-NEXT: orw $7, %di # sched: [1:0.33] +; GENERIC-NEXT: orw $7, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: orw %di, %di # sched: [1:0.33] +; GENERIC-NEXT: orw %di, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: orw (%rsi), %di # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_outs: +; ATOM-LABEL: test_or_16: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: outsb (%rsi), %dx # sched: [74:37.00] -; ATOM-NEXT: outsw (%rsi), %dx # sched: [74:37.00] -; ATOM-NEXT: outsl (%rsi), %dx # sched: [74:37.00] +; ATOM-NEXT: orw $511, %ax # imm = 0x1FF +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: orw $511, %di # imm = 0x1FF +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: orw $511, (%rsi) # imm = 0x1FF +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: orw $7, %di # sched: [1:0.50] +; ATOM-NEXT: orw $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: orw %di, %di # sched: [1:0.50] +; ATOM-NEXT: orw %di, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: orw (%rsi), %di # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_outs: +; SLM-LABEL: test_or_16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: outsb (%rsi), %dx # sched: [100:1.00] -; SLM-NEXT: outsw (%rsi), %dx # sched: [100:1.00] -; SLM-NEXT: outsl (%rsi), %dx # sched: [100:1.00] +; SLM-NEXT: orw $511, %ax # imm = 0x1FF +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: orw $511, %di # imm = 0x1FF +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: orw $511, (%rsi) # imm = 0x1FF +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: orw $7, %di # sched: [1:0.50] +; SLM-NEXT: orw $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: orw %di, %di # sched: [1:0.50] +; SLM-NEXT: orw %di, (%rsi) # sched: [4:2.00] +; SLM-NEXT: orw (%rsi), %di # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_outs: +; SANDY-LABEL: test_or_16: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: outsb (%rsi), %dx # sched: [100:0.33] -; SANDY-NEXT: outsw (%rsi), %dx # sched: [100:0.33] -; SANDY-NEXT: outsl (%rsi), %dx # sched: [100:0.33] +; SANDY-NEXT: orw $511, %ax # imm = 0x1FF +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: orw $511, %di # imm = 0x1FF +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: orw $511, (%rsi) # imm = 0x1FF +; SANDY-NEXT: # sched: [7:1.00] +; SANDY-NEXT: orw $7, %di # sched: [1:0.33] +; SANDY-NEXT: orw $7, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: orw %di, %di # sched: [1:0.33] +; SANDY-NEXT: orw %di, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: orw (%rsi), %di # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_outs: +; HASWELL-LABEL: test_or_16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: outsb (%rsi), %dx # sched: [100:0.25] -; HASWELL-NEXT: outsw (%rsi), %dx # sched: [100:0.25] -; HASWELL-NEXT: outsl (%rsi), %dx # sched: [100:0.25] +; HASWELL-NEXT: orw $511, %ax # imm = 0x1FF +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: orw $511, %di # imm = 0x1FF +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: orw $511, (%rsi) # imm = 0x1FF +; HASWELL-NEXT: # sched: [7:1.00] +; HASWELL-NEXT: orw $7, %di # sched: [1:0.25] +; HASWELL-NEXT: orw $7, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: orw %di, %di # sched: [1:0.25] +; HASWELL-NEXT: orw %di, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: orw (%rsi), %di # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_outs: +; BROADWELL-LABEL: test_or_16: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: outsb (%rsi), %dx # sched: [100:0.25] -; BROADWELL-NEXT: outsw (%rsi), %dx # sched: [100:0.25] -; BROADWELL-NEXT: outsl (%rsi), %dx # sched: [100:0.25] +; BROADWELL-NEXT: orw $511, %ax # imm = 0x1FF +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: orw $511, %di # imm = 0x1FF +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: orw $511, (%rsi) # imm = 0x1FF +; BROADWELL-NEXT: # sched: [6:1.00] +; BROADWELL-NEXT: orw $7, %di # sched: [1:0.25] +; BROADWELL-NEXT: orw $7, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: orw %di, %di # sched: [1:0.25] +; BROADWELL-NEXT: orw %di, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: orw (%rsi), %di # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_outs: +; SKYLAKE-LABEL: test_or_16: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: outsb (%rsi), %dx # sched: [100:0.25] -; SKYLAKE-NEXT: outsw (%rsi), %dx # sched: [100:0.25] -; SKYLAKE-NEXT: outsl (%rsi), %dx # sched: [100:0.25] +; SKYLAKE-NEXT: orw $511, %ax # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: orw $511, %di # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: orw $511, (%rsi) # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [6:1.00] +; SKYLAKE-NEXT: orw $7, %di # sched: [1:0.25] +; SKYLAKE-NEXT: orw $7, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: orw %di, %di # sched: [1:0.25] +; SKYLAKE-NEXT: orw %di, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: orw (%rsi), %di # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_outs: +; SKX-LABEL: test_or_16: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: outsb (%rsi), %dx # sched: [100:0.25] -; SKX-NEXT: outsw (%rsi), %dx # sched: [100:0.25] -; SKX-NEXT: outsl (%rsi), %dx # sched: [100:0.25] +; SKX-NEXT: orw $511, %ax # imm = 0x1FF +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: orw $511, %di # imm = 0x1FF +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: orw $511, (%rsi) # imm = 0x1FF +; SKX-NEXT: # sched: [6:1.00] +; SKX-NEXT: orw $7, %di # sched: [1:0.25] +; SKX-NEXT: orw $7, (%rsi) # sched: [6:1.00] +; SKX-NEXT: orw %di, %di # sched: [1:0.25] +; SKX-NEXT: orw %di, (%rsi) # sched: [6:1.00] +; SKX-NEXT: orw (%rsi), %di # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_outs: +; BTVER2-LABEL: test_or_16: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: outsb (%rsi), %dx # sched: [100:0.17] -; BTVER2-NEXT: outsw (%rsi), %dx # sched: [100:0.17] -; BTVER2-NEXT: outsl (%rsi), %dx # sched: [100:0.17] +; BTVER2-NEXT: orw $511, %ax # imm = 0x1FF +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: orw $511, %di # imm = 0x1FF +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: orw $511, (%rsi) # imm = 0x1FF +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: orw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: orw $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: orw %di, %di # sched: [1:0.50] +; BTVER2-NEXT: orw %di, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: orw (%rsi), %di # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_outs: +; ZNVER1-LABEL: test_or_16: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: outsb (%rsi), %dx # sched: [100:?] -; ZNVER1-NEXT: outsw (%rsi), %dx # sched: [100:?] -; ZNVER1-NEXT: outsl (%rsi), %dx # sched: [100:?] +; ZNVER1-NEXT: orw $511, %ax # imm = 0x1FF +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: orw $511, %di # imm = 0x1FF +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: orw $511, (%rsi) # imm = 0x1FF +; ZNVER1-NEXT: # sched: [5:0.50] +; ZNVER1-NEXT: orw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: orw $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: orw %di, %di # sched: [1:0.25] +; ZNVER1-NEXT: orw %di, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: orw (%rsi), %di # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "outsb \0A\09 outsw \0A\09 outsl", ""() + tail call void asm "orw $2, %AX \0A\09 orw $2, $0 \0A\09 orw $2, $1 \0A\09 orw $3, $0 \0A\09 orw $3, $1 \0A\09 orw $0, $0 \0A\09 orw $0, $1 \0A\09 orw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind ret void } - -define void @test_pause() optsize { -; GENERIC-LABEL: test_pause: +define void @test_or_32(i32 %a0, i32* %a1) optsize { +; GENERIC-LABEL: test_or_32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: pause # sched: [4:1.33] +; GENERIC-NEXT: orl $665536, %eax # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: orl $665536, %edi # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [7:1.00] +; GENERIC-NEXT: orl $7, %edi # sched: [1:0.33] +; GENERIC-NEXT: orl $7, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: orl %edi, %edi # sched: [1:0.33] +; GENERIC-NEXT: orl %edi, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: orl (%rsi), %edi # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_pause: +; ATOM-LABEL: test_or_32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: pause # sched: [17:8.50] +; ATOM-NEXT: orl $665536, %eax # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: orl $665536, %edi # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: orl $7, %edi # sched: [1:0.50] +; ATOM-NEXT: orl $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: orl %edi, %edi # sched: [1:0.50] +; ATOM-NEXT: orl %edi, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: orl (%rsi), %edi # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_pause: +; SLM-LABEL: test_or_32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: pause # sched: [1:?] +; SLM-NEXT: orl $665536, %eax # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: orl $665536, %edi # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: orl $7, %edi # sched: [1:0.50] +; SLM-NEXT: orl $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: orl %edi, %edi # sched: [1:0.50] +; SLM-NEXT: orl %edi, (%rsi) # sched: [4:2.00] +; SLM-NEXT: orl (%rsi), %edi # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_pause: +; SANDY-LABEL: test_or_32: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: pause # sched: [4:1.33] -; SANDY-NEXT: #NO_APP -; SANDY-NEXT: retq # sched: [1:1.00] -; -; HASWELL-LABEL: test_pause: +; SANDY-NEXT: orl $665536, %eax # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: orl $665536, %edi # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [7:1.00] +; SANDY-NEXT: orl $7, %edi # sched: [1:0.33] +; SANDY-NEXT: orl $7, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: orl %edi, %edi # sched: [1:0.33] +; SANDY-NEXT: orl %edi, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: orl (%rsi), %edi # sched: [6:0.50] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retq # sched: [1:1.00] +; +; HASWELL-LABEL: test_or_32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: pause # sched: [5:1.25] +; HASWELL-NEXT: orl $665536, %eax # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: orl $665536, %edi # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [7:1.00] +; HASWELL-NEXT: orl $7, %edi # sched: [1:0.25] +; HASWELL-NEXT: orl $7, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: orl %edi, %edi # sched: [1:0.25] +; HASWELL-NEXT: orl %edi, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: orl (%rsi), %edi # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_pause: +; BROADWELL-LABEL: test_or_32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: pause # sched: [5:1.25] +; BROADWELL-NEXT: orl $665536, %eax # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: orl $665536, %edi # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [6:1.00] +; BROADWELL-NEXT: orl $7, %edi # sched: [1:0.25] +; BROADWELL-NEXT: orl $7, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: orl %edi, %edi # sched: [1:0.25] +; BROADWELL-NEXT: orl %edi, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: orl (%rsi), %edi # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_pause: +; SKYLAKE-LABEL: test_or_32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: pause # sched: [4:1.00] +; SKYLAKE-NEXT: orl $665536, %eax # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: orl $665536, %edi # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [6:1.00] +; SKYLAKE-NEXT: orl $7, %edi # sched: [1:0.25] +; SKYLAKE-NEXT: orl $7, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: orl %edi, %edi # sched: [1:0.25] +; SKYLAKE-NEXT: orl %edi, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: orl (%rsi), %edi # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_pause: +; SKX-LABEL: test_or_32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: pause # sched: [140:1.00] +; SKX-NEXT: orl $665536, %eax # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: orl $665536, %edi # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: # sched: [6:1.00] +; SKX-NEXT: orl $7, %edi # sched: [1:0.25] +; SKX-NEXT: orl $7, (%rsi) # sched: [6:1.00] +; SKX-NEXT: orl %edi, %edi # sched: [1:0.25] +; SKX-NEXT: orl %edi, (%rsi) # sched: [6:1.00] +; SKX-NEXT: orl (%rsi), %edi # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_pause: +; BTVER2-LABEL: test_or_32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: pause # sched: [1:?] +; BTVER2-NEXT: orl $665536, %eax # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: orl $665536, %edi # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: orl $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: orl $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: orl %edi, %edi # sched: [1:0.50] +; BTVER2-NEXT: orl %edi, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: orl (%rsi), %edi # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_pause: +; ZNVER1-LABEL: test_or_32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: pause # sched: [100:?] +; ZNVER1-NEXT: orl $665536, %eax # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: orl $665536, %edi # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: orl $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:0.50] +; ZNVER1-NEXT: orl $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: orl $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: orl %edi, %edi # sched: [1:0.25] +; ZNVER1-NEXT: orl %edi, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: orl (%rsi), %edi # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "pause", ""() + tail call void asm "orl $2, %EAX \0A\09 orl $2, $0 \0A\09 orl $2, $1 \0A\09 orl $3, $0 \0A\09 orl $3, $1 \0A\09 orl $0, $0 \0A\09 orl $0, $1 \0A\09 orl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind ret void } - -; TODO - test_pop -; TODO - test_popa -; TODO - test_popf -; TODO - test_popfd -; TODO - test_popfq - -; TODO - test_prefetch -; TODO - test_prefetchw -; TODO - test_prefetchX - -; TODO - test_push -; TODO - test_pusha -; TODO - test_pushad -; TODO - test_pushf -; TODO - test_pushfd -; TODO - test_pushfq - -define void @test_rcl_rcr_8(i8 %a0, i8 %a1, i8 *%a2) optsize { -; GENERIC-LABEL: test_rcl_rcr_8: +define void @test_or_64(i64 %a0, i64* %a1) optsize { +; GENERIC-LABEL: test_or_64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: rclb %dil # sched: [1:0.50] -; GENERIC-NEXT: rcrb %dil # sched: [1:0.50] -; GENERIC-NEXT: rclb (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrb (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rclb $7, %dil # sched: [1:0.50] -; GENERIC-NEXT: rcrb $7, %dil # sched: [1:0.50] -; GENERIC-NEXT: rclb $7, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrb $7, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rclb %cl, %dil # sched: [1:0.50] -; GENERIC-NEXT: rcrb %cl, %dil # sched: [1:0.50] -; GENERIC-NEXT: rclb %cl, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrb %cl, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: orq $665536, %rax # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [7:1.00] +; GENERIC-NEXT: orq $7, %rdi # sched: [1:0.33] +; GENERIC-NEXT: orq $7, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: orq %rdi, %rdi # sched: [1:0.33] +; GENERIC-NEXT: orq %rdi, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: orq (%rsi), %rdi # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_rcl_rcr_8: +; ATOM-LABEL: test_or_64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: rclb %dil # sched: [1:1.00] -; ATOM-NEXT: rcrb %dil # sched: [1:1.00] -; ATOM-NEXT: rclb (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrb (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rclb $7, %dil # sched: [1:1.00] -; ATOM-NEXT: rcrb $7, %dil # sched: [1:1.00] -; ATOM-NEXT: rclb $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrb $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rclb %cl, %dil # sched: [1:1.00] -; ATOM-NEXT: rcrb %cl, %dil # sched: [1:1.00] -; ATOM-NEXT: rclb %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrb %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: orq $665536, %rax # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: orq $7, %rdi # sched: [1:0.50] +; ATOM-NEXT: orq $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: orq %rdi, %rdi # sched: [1:0.50] +; ATOM-NEXT: orq %rdi, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: orq (%rsi), %rdi # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_rcl_rcr_8: +; SLM-LABEL: test_or_64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: rclb %dil # sched: [1:1.00] -; SLM-NEXT: rcrb %dil # sched: [1:1.00] -; SLM-NEXT: rclb (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrb (%rdx) # sched: [4:2.00] -; SLM-NEXT: rclb $7, %dil # sched: [1:1.00] -; SLM-NEXT: rcrb $7, %dil # sched: [1:1.00] -; SLM-NEXT: rclb $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrb $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rclb %cl, %dil # sched: [1:1.00] -; SLM-NEXT: rcrb %cl, %dil # sched: [1:1.00] -; SLM-NEXT: rclb %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrb %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: orq $665536, %rax # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: orq $7, %rdi # sched: [1:0.50] +; SLM-NEXT: orq $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: orq %rdi, %rdi # sched: [1:0.50] +; SLM-NEXT: orq %rdi, (%rsi) # sched: [4:2.00] +; SLM-NEXT: orq (%rsi), %rdi # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_rcl_rcr_8: +; SANDY-LABEL: test_or_64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: rclb %dil # sched: [1:0.50] -; SANDY-NEXT: rcrb %dil # sched: [1:0.50] -; SANDY-NEXT: rclb (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrb (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rclb $7, %dil # sched: [1:0.50] -; SANDY-NEXT: rcrb $7, %dil # sched: [1:0.50] -; SANDY-NEXT: rclb $7, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrb $7, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rclb %cl, %dil # sched: [1:0.50] -; SANDY-NEXT: rcrb %cl, %dil # sched: [1:0.50] -; SANDY-NEXT: rclb %cl, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrb %cl, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: orq $665536, %rax # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [7:1.00] +; SANDY-NEXT: orq $7, %rdi # sched: [1:0.33] +; SANDY-NEXT: orq $7, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: orq %rdi, %rdi # sched: [1:0.33] +; SANDY-NEXT: orq %rdi, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: orq (%rsi), %rdi # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_rcl_rcr_8: +; HASWELL-LABEL: test_or_64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: rclb %dil # sched: [3:0.75] -; HASWELL-NEXT: rcrb %dil # sched: [3:0.75] -; HASWELL-NEXT: rclb (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcrb (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rclb $7, %dil # sched: [3:0.75] -; HASWELL-NEXT: rcrb $7, %dil # sched: [3:0.75] -; HASWELL-NEXT: rclb $7, (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcrb $7, (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rclb %cl, %dil # sched: [11:2.25] -; HASWELL-NEXT: rcrb %cl, %dil # sched: [14:2.50] -; HASWELL-NEXT: rclb %cl, (%rdx) # sched: [16:2.00] -; HASWELL-NEXT: rcrb %cl, (%rdx) # sched: [19:2.25] +; HASWELL-NEXT: orq $665536, %rax # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [7:1.00] +; HASWELL-NEXT: orq $7, %rdi # sched: [1:0.25] +; HASWELL-NEXT: orq $7, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: orq %rdi, %rdi # sched: [1:0.25] +; HASWELL-NEXT: orq %rdi, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: orq (%rsi), %rdi # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_rcl_rcr_8: +; BROADWELL-LABEL: test_or_64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: rclb %dil # sched: [3:0.75] -; BROADWELL-NEXT: rcrb %dil # sched: [3:0.75] -; BROADWELL-NEXT: rclb (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcrb (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rclb $7, %dil # sched: [3:0.75] -; BROADWELL-NEXT: rcrb $7, %dil # sched: [3:0.75] -; BROADWELL-NEXT: rclb $7, (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcrb $7, (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rclb %cl, %dil # sched: [11:2.25] -; BROADWELL-NEXT: rcrb %cl, %dil # sched: [14:2.50] -; BROADWELL-NEXT: rclb %cl, (%rdx) # sched: [15:2.00] -; BROADWELL-NEXT: rcrb %cl, (%rdx) # sched: [18:2.25] +; BROADWELL-NEXT: orq $665536, %rax # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [6:1.00] +; BROADWELL-NEXT: orq $7, %rdi # sched: [1:0.25] +; BROADWELL-NEXT: orq $7, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: orq %rdi, %rdi # sched: [1:0.25] +; BROADWELL-NEXT: orq %rdi, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: orq (%rsi), %rdi # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_rcl_rcr_8: +; SKYLAKE-LABEL: test_or_64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: rclb %dil # sched: [3:0.75] -; SKYLAKE-NEXT: rcrb %dil # sched: [3:0.75] -; SKYLAKE-NEXT: rclb (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcrb (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rclb $7, %dil # sched: [3:0.75] -; SKYLAKE-NEXT: rcrb $7, %dil # sched: [3:0.75] -; SKYLAKE-NEXT: rclb $7, (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcrb $7, (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rclb %cl, %dil # sched: [11:2.50] -; SKYLAKE-NEXT: rcrb %cl, %dil # sched: [14:2.50] -; SKYLAKE-NEXT: rclb %cl, (%rdx) # sched: [15:2.50] -; SKYLAKE-NEXT: rcrb %cl, (%rdx) # sched: [18:2.25] +; SKYLAKE-NEXT: orq $665536, %rax # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [6:1.00] +; SKYLAKE-NEXT: orq $7, %rdi # sched: [1:0.25] +; SKYLAKE-NEXT: orq $7, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: orq %rdi, %rdi # sched: [1:0.25] +; SKYLAKE-NEXT: orq %rdi, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: orq (%rsi), %rdi # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_rcl_rcr_8: +; SKX-LABEL: test_or_64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: rclb %dil # sched: [3:0.75] -; SKX-NEXT: rcrb %dil # sched: [3:0.75] -; SKX-NEXT: rclb (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcrb (%rdx) # sched: [8:0.75] -; SKX-NEXT: rclb $7, %dil # sched: [3:0.75] -; SKX-NEXT: rcrb $7, %dil # sched: [3:0.75] -; SKX-NEXT: rclb $7, (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcrb $7, (%rdx) # sched: [8:0.75] -; SKX-NEXT: rclb %cl, %dil # sched: [11:2.50] -; SKX-NEXT: rcrb %cl, %dil # sched: [14:2.50] -; SKX-NEXT: rclb %cl, (%rdx) # sched: [15:2.50] -; SKX-NEXT: rcrb %cl, (%rdx) # sched: [18:2.25] +; SKX-NEXT: orq $665536, %rax # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: # sched: [6:1.00] +; SKX-NEXT: orq $7, %rdi # sched: [1:0.25] +; SKX-NEXT: orq $7, (%rsi) # sched: [6:1.00] +; SKX-NEXT: orq %rdi, %rdi # sched: [1:0.25] +; SKX-NEXT: orq %rdi, (%rsi) # sched: [6:1.00] +; SKX-NEXT: orq (%rsi), %rdi # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_rcl_rcr_8: +; BTVER2-LABEL: test_or_64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: rclb %dil # sched: [1:0.50] -; BTVER2-NEXT: rcrb %dil # sched: [1:0.50] -; BTVER2-NEXT: rclb (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrb (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rclb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: rcrb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: rclb $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrb $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rclb %cl, %dil # sched: [1:0.50] -; BTVER2-NEXT: rcrb %cl, %dil # sched: [1:0.50] -; BTVER2-NEXT: rclb %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrb %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: orq $665536, %rax # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: orq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: orq $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: orq %rdi, %rdi # sched: [1:0.50] +; BTVER2-NEXT: orq %rdi, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: orq (%rsi), %rdi # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_rcl_rcr_8: +; ZNVER1-LABEL: test_or_64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: rclb %dil # sched: [1:0.25] -; ZNVER1-NEXT: rcrb %dil # sched: [1:0.25] -; ZNVER1-NEXT: rclb (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrb (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rclb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: rcrb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: rclb $7, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrb $7, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rclb %cl, %dil # sched: [1:0.25] -; ZNVER1-NEXT: rcrb %cl, %dil # sched: [1:0.25] -; ZNVER1-NEXT: rclb %cl, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrb %cl, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: orq $665536, %rax # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: orq $665536, %rdi # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: orq $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:0.50] +; ZNVER1-NEXT: orq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: orq $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: orq %rdi, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: orq %rdi, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: orq (%rsi), %rdi # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "rclb $0 \0A\09 rcrb $0 \0A\09 rclb $2 \0A\09 rcrb $2 \0A\09 rclb $3, $0 \0A\09 rcrb $3, $0 \0A\09 rclb $3, $2 \0A\09 rcrb $3, $2 \0A\09 rclb %CL, $0 \0A\09 rcrb %CL, $0 \0A\09 rclb %CL, $2 \0A\09 rcrb %CL, $2", "r,r,*m,i"(i8 %a0, i8 %a1, i8 *%a2, i8 7) + tail call void asm "orq $2, %RAX \0A\09 orq $2, $0 \0A\09 orq $2, $1 \0A\09 orq $3, $0 \0A\09 orq $3, $1 \0A\09 orq $0, $0 \0A\09 orq $0, $1 \0A\09 orq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind ret void } -define void @test_rcl_rcr_16(i16 %a0, i16 %a1, i16 *%a2) optsize { -; GENERIC-LABEL: test_rcl_rcr_16: + +define void @test_out() optsize { +; GENERIC-LABEL: test_out: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: rclw %di # sched: [1:0.50] -; GENERIC-NEXT: rcrw %di # sched: [1:0.50] -; GENERIC-NEXT: rclw (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrw (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rclw $7, %di # sched: [1:0.50] -; GENERIC-NEXT: rcrw $7, %di # sched: [1:0.50] -; GENERIC-NEXT: rclw $7, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrw $7, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rclw %cl, %di # sched: [1:0.50] -; GENERIC-NEXT: rcrw %cl, %di # sched: [1:0.50] -; GENERIC-NEXT: rclw %cl, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrw %cl, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: outb %al, $7 # sched: [4:1.33] +; GENERIC-NEXT: outw %ax, $7 # sched: [100:0.33] +; GENERIC-NEXT: outl %eax, $7 # sched: [4:1.33] +; GENERIC-NEXT: outb %al, %dx # sched: [3:1.00] +; GENERIC-NEXT: outw %ax, %dx # sched: [100:0.33] +; GENERIC-NEXT: outl %eax, %dx # sched: [3:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_rcl_rcr_16: +; ATOM-LABEL: test_out: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: rclw %di # sched: [1:1.00] -; ATOM-NEXT: rcrw %di # sched: [1:1.00] -; ATOM-NEXT: rclw (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrw (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rclw $7, %di # sched: [1:1.00] -; ATOM-NEXT: rcrw $7, %di # sched: [1:1.00] -; ATOM-NEXT: rclw $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrw $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rclw %cl, %di # sched: [1:1.00] -; ATOM-NEXT: rcrw %cl, %di # sched: [1:1.00] -; ATOM-NEXT: rclw %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrw %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: outb %al, $7 # sched: [72:36.00] +; ATOM-NEXT: outw %ax, $7 # sched: [72:36.00] +; ATOM-NEXT: outl %eax, $7 # sched: [72:36.00] +; ATOM-NEXT: outb %al, %dx # sched: [68:34.00] +; ATOM-NEXT: outw %ax, %dx # sched: [68:34.00] +; ATOM-NEXT: outl %eax, %dx # sched: [68:34.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_rcl_rcr_16: +; SLM-LABEL: test_out: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: rclw %di # sched: [1:1.00] -; SLM-NEXT: rcrw %di # sched: [1:1.00] -; SLM-NEXT: rclw (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrw (%rdx) # sched: [4:2.00] -; SLM-NEXT: rclw $7, %di # sched: [1:1.00] -; SLM-NEXT: rcrw $7, %di # sched: [1:1.00] -; SLM-NEXT: rclw $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrw $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rclw %cl, %di # sched: [1:1.00] -; SLM-NEXT: rcrw %cl, %di # sched: [1:1.00] -; SLM-NEXT: rclw %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrw %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: outb %al, $7 # sched: [100:1.00] +; SLM-NEXT: outw %ax, $7 # sched: [100:1.00] +; SLM-NEXT: outl %eax, $7 # sched: [100:1.00] +; SLM-NEXT: outb %al, %dx # sched: [100:1.00] +; SLM-NEXT: outw %ax, %dx # sched: [100:1.00] +; SLM-NEXT: outl %eax, %dx # sched: [100:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_rcl_rcr_16: +; SANDY-LABEL: test_out: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: rclw %di # sched: [1:0.50] -; SANDY-NEXT: rcrw %di # sched: [1:0.50] -; SANDY-NEXT: rclw (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrw (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rclw $7, %di # sched: [1:0.50] -; SANDY-NEXT: rcrw $7, %di # sched: [1:0.50] -; SANDY-NEXT: rclw $7, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrw $7, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rclw %cl, %di # sched: [1:0.50] -; SANDY-NEXT: rcrw %cl, %di # sched: [1:0.50] -; SANDY-NEXT: rclw %cl, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrw %cl, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: outb %al, $7 # sched: [4:1.33] +; SANDY-NEXT: outw %ax, $7 # sched: [100:0.33] +; SANDY-NEXT: outl %eax, $7 # sched: [4:1.33] +; SANDY-NEXT: outb %al, %dx # sched: [3:1.00] +; SANDY-NEXT: outw %ax, %dx # sched: [100:0.33] +; SANDY-NEXT: outl %eax, %dx # sched: [3:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_rcl_rcr_16: +; HASWELL-LABEL: test_out: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: rclw %di # sched: [3:0.75] -; HASWELL-NEXT: rcrw %di # sched: [3:0.75] -; HASWELL-NEXT: rclw (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcrw (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rclw $7, %di # sched: [3:0.75] -; HASWELL-NEXT: rcrw $7, %di # sched: [3:0.75] -; HASWELL-NEXT: rclw $7, (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcrw $7, (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rclw %cl, %di # sched: [11:2.00] -; HASWELL-NEXT: rcrw %cl, %di # sched: [11:2.00] -; HASWELL-NEXT: rclw %cl, (%rdx) # sched: [16:2.00] -; HASWELL-NEXT: rcrw %cl, (%rdx) # sched: [19:2.25] +; HASWELL-NEXT: outb %al, $7 # sched: [36:5.00] +; HASWELL-NEXT: outw %ax, $7 # sched: [36:5.00] +; HASWELL-NEXT: outl %eax, $7 # sched: [36:5.00] +; HASWELL-NEXT: outb %al, %dx # sched: [36:5.00] +; HASWELL-NEXT: outw %ax, %dx # sched: [36:5.00] +; HASWELL-NEXT: outl %eax, %dx # sched: [36:5.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_rcl_rcr_16: +; BROADWELL-LABEL: test_out: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: rclw %di # sched: [3:0.75] -; BROADWELL-NEXT: rcrw %di # sched: [3:0.75] -; BROADWELL-NEXT: rclw (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcrw (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rclw $7, %di # sched: [3:0.75] -; BROADWELL-NEXT: rcrw $7, %di # sched: [3:0.75] -; BROADWELL-NEXT: rclw $7, (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcrw $7, (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rclw %cl, %di # sched: [11:2.00] -; BROADWELL-NEXT: rcrw %cl, %di # sched: [11:2.00] -; BROADWELL-NEXT: rclw %cl, (%rdx) # sched: [15:2.00] -; BROADWELL-NEXT: rcrw %cl, (%rdx) # sched: [18:2.25] +; BROADWELL-NEXT: outb %al, $7 # sched: [35:5.00] +; BROADWELL-NEXT: outw %ax, $7 # sched: [35:5.00] +; BROADWELL-NEXT: outl %eax, $7 # sched: [35:5.00] +; BROADWELL-NEXT: outb %al, %dx # sched: [35:5.00] +; BROADWELL-NEXT: outw %ax, %dx # sched: [35:5.00] +; BROADWELL-NEXT: outl %eax, %dx # sched: [35:5.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_rcl_rcr_16: +; SKYLAKE-LABEL: test_out: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: rclw %di # sched: [3:0.75] -; SKYLAKE-NEXT: rcrw %di # sched: [3:0.75] -; SKYLAKE-NEXT: rclw (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcrw (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rclw $7, %di # sched: [3:0.75] -; SKYLAKE-NEXT: rcrw $7, %di # sched: [3:0.75] -; SKYLAKE-NEXT: rclw $7, (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcrw $7, (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rclw %cl, %di # sched: [11:2.00] -; SKYLAKE-NEXT: rcrw %cl, %di # sched: [11:2.00] -; SKYLAKE-NEXT: rclw %cl, (%rdx) # sched: [15:2.50] -; SKYLAKE-NEXT: rcrw %cl, (%rdx) # sched: [18:2.25] -; SKYLAKE-NEXT: #NO_APP -; SKYLAKE-NEXT: retq # sched: [7:1.00] -; -; SKX-LABEL: test_rcl_rcr_16: +; SKYLAKE-NEXT: outb %al, $7 # sched: [35:5.00] +; SKYLAKE-NEXT: outw %ax, $7 # sched: [35:5.00] +; SKYLAKE-NEXT: outl %eax, $7 # sched: [35:5.00] +; SKYLAKE-NEXT: outb %al, %dx # sched: [35:5.00] +; SKYLAKE-NEXT: outw %ax, %dx # sched: [35:5.00] +; SKYLAKE-NEXT: outl %eax, %dx # sched: [35:5.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_out: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: rclw %di # sched: [3:0.75] -; SKX-NEXT: rcrw %di # sched: [3:0.75] -; SKX-NEXT: rclw (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcrw (%rdx) # sched: [8:0.75] -; SKX-NEXT: rclw $7, %di # sched: [3:0.75] -; SKX-NEXT: rcrw $7, %di # sched: [3:0.75] -; SKX-NEXT: rclw $7, (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcrw $7, (%rdx) # sched: [8:0.75] -; SKX-NEXT: rclw %cl, %di # sched: [11:2.00] -; SKX-NEXT: rcrw %cl, %di # sched: [11:2.00] -; SKX-NEXT: rclw %cl, (%rdx) # sched: [15:2.50] -; SKX-NEXT: rcrw %cl, (%rdx) # sched: [18:2.25] +; SKX-NEXT: outb %al, $7 # sched: [35:5.00] +; SKX-NEXT: outw %ax, $7 # sched: [35:5.00] +; SKX-NEXT: outl %eax, $7 # sched: [35:5.00] +; SKX-NEXT: outb %al, %dx # sched: [35:5.00] +; SKX-NEXT: outw %ax, %dx # sched: [35:5.00] +; SKX-NEXT: outl %eax, %dx # sched: [35:5.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_rcl_rcr_16: +; BTVER2-LABEL: test_out: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: rclw %di # sched: [1:0.50] -; BTVER2-NEXT: rcrw %di # sched: [1:0.50] -; BTVER2-NEXT: rclw (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrw (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rclw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: rcrw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: rclw $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrw $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rclw %cl, %di # sched: [1:0.50] -; BTVER2-NEXT: rcrw %cl, %di # sched: [1:0.50] -; BTVER2-NEXT: rclw %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrw %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: outb %al, $7 # sched: [100:0.17] +; BTVER2-NEXT: outw %ax, $7 # sched: [100:0.17] +; BTVER2-NEXT: outl %eax, $7 # sched: [100:0.17] +; BTVER2-NEXT: outb %al, %dx # sched: [100:0.17] +; BTVER2-NEXT: outw %ax, %dx # sched: [100:0.17] +; BTVER2-NEXT: outl %eax, %dx # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_rcl_rcr_16: +; ZNVER1-LABEL: test_out: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: rclw %di # sched: [1:0.25] -; ZNVER1-NEXT: rcrw %di # sched: [1:0.25] -; ZNVER1-NEXT: rclw (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrw (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rclw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: rcrw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: rclw $7, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrw $7, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rclw %cl, %di # sched: [1:0.25] -; ZNVER1-NEXT: rcrw %cl, %di # sched: [1:0.25] -; ZNVER1-NEXT: rclw %cl, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrw %cl, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: outb %al, $7 # sched: [100:?] +; ZNVER1-NEXT: outw %ax, $7 # sched: [100:?] +; ZNVER1-NEXT: outl %eax, $7 # sched: [100:?] +; ZNVER1-NEXT: outb %al, %dx # sched: [100:?] +; ZNVER1-NEXT: outw %ax, %dx # sched: [100:?] +; ZNVER1-NEXT: outl %eax, %dx # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "rclw $0 \0A\09 rcrw $0 \0A\09 rclw $2 \0A\09 rcrw $2 \0A\09 rclw $3, $0 \0A\09 rcrw $3, $0 \0A\09 rclw $3, $2 \0A\09 rcrw $3, $2 \0A\09 rclw %CL, $0 \0A\09 rcrw %CL, $0 \0A\09 rclw %CL, $2 \0A\09 rcrw %CL, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7) + tail call void asm "outb %AL, $0 \0A\09 outw %AX, $0 \0A\09 outl %EAX, $0 \0A\09 outb %AL, %DX \0A\09 outw %AX, %DX \0A\09 outl %EAX, %DX", "i"(i8 7) nounwind ret void } -define void @test_rcl_rcr_32(i32 %a0, i32 %a1, i32 *%a2) optsize { -; GENERIC-LABEL: test_rcl_rcr_32: + +define void @test_outs() optsize { +; GENERIC-LABEL: test_outs: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: rcll %edi # sched: [1:0.50] -; GENERIC-NEXT: rcrl %edi # sched: [1:0.50] -; GENERIC-NEXT: rcll (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrl (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcll $7, %edi # sched: [1:0.50] -; GENERIC-NEXT: rcrl $7, %edi # sched: [1:0.50] -; GENERIC-NEXT: rcll $7, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrl $7, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcll %cl, %edi # sched: [1:0.50] -; GENERIC-NEXT: rcrl %cl, %edi # sched: [1:0.50] -; GENERIC-NEXT: rcll %cl, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrl %cl, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: outsb (%rsi), %dx # sched: [100:0.33] +; GENERIC-NEXT: outsw (%rsi), %dx # sched: [100:0.33] +; GENERIC-NEXT: outsl (%rsi), %dx # sched: [100:0.33] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_rcl_rcr_32: +; ATOM-LABEL: test_outs: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: rcll %edi # sched: [1:1.00] -; ATOM-NEXT: rcrl %edi # sched: [1:1.00] -; ATOM-NEXT: rcll (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrl (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcll $7, %edi # sched: [1:1.00] -; ATOM-NEXT: rcrl $7, %edi # sched: [1:1.00] -; ATOM-NEXT: rcll $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrl $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcll %cl, %edi # sched: [1:1.00] -; ATOM-NEXT: rcrl %cl, %edi # sched: [1:1.00] -; ATOM-NEXT: rcll %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrl %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: outsb (%rsi), %dx # sched: [74:37.00] +; ATOM-NEXT: outsw (%rsi), %dx # sched: [74:37.00] +; ATOM-NEXT: outsl (%rsi), %dx # sched: [74:37.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_rcl_rcr_32: +; SLM-LABEL: test_outs: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: rcll %edi # sched: [1:1.00] -; SLM-NEXT: rcrl %edi # sched: [1:1.00] -; SLM-NEXT: rcll (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrl (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcll $7, %edi # sched: [1:1.00] -; SLM-NEXT: rcrl $7, %edi # sched: [1:1.00] -; SLM-NEXT: rcll $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrl $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcll %cl, %edi # sched: [1:1.00] -; SLM-NEXT: rcrl %cl, %edi # sched: [1:1.00] -; SLM-NEXT: rcll %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrl %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: outsb (%rsi), %dx # sched: [100:1.00] +; SLM-NEXT: outsw (%rsi), %dx # sched: [100:1.00] +; SLM-NEXT: outsl (%rsi), %dx # sched: [100:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_rcl_rcr_32: +; SANDY-LABEL: test_outs: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: rcll %edi # sched: [1:0.50] -; SANDY-NEXT: rcrl %edi # sched: [1:0.50] -; SANDY-NEXT: rcll (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrl (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcll $7, %edi # sched: [1:0.50] -; SANDY-NEXT: rcrl $7, %edi # sched: [1:0.50] -; SANDY-NEXT: rcll $7, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrl $7, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcll %cl, %edi # sched: [1:0.50] -; SANDY-NEXT: rcrl %cl, %edi # sched: [1:0.50] -; SANDY-NEXT: rcll %cl, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrl %cl, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: outsb (%rsi), %dx # sched: [100:0.33] +; SANDY-NEXT: outsw (%rsi), %dx # sched: [100:0.33] +; SANDY-NEXT: outsl (%rsi), %dx # sched: [100:0.33] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_rcl_rcr_32: +; HASWELL-LABEL: test_outs: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: rcll %edi # sched: [3:0.75] -; HASWELL-NEXT: rcrl %edi # sched: [3:0.75] -; HASWELL-NEXT: rcll (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcrl (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcll $7, %edi # sched: [3:0.75] -; HASWELL-NEXT: rcrl $7, %edi # sched: [3:0.75] -; HASWELL-NEXT: rcll $7, (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcrl $7, (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcll %cl, %edi # sched: [11:2.00] -; HASWELL-NEXT: rcrl %cl, %edi # sched: [11:2.00] -; HASWELL-NEXT: rcll %cl, (%rdx) # sched: [16:2.00] -; HASWELL-NEXT: rcrl %cl, (%rdx) # sched: [19:2.25] +; HASWELL-NEXT: outsb (%rsi), %dx # sched: [100:0.25] +; HASWELL-NEXT: outsw (%rsi), %dx # sched: [100:0.25] +; HASWELL-NEXT: outsl (%rsi), %dx # sched: [100:0.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_rcl_rcr_32: +; BROADWELL-LABEL: test_outs: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: rcll %edi # sched: [3:0.75] -; BROADWELL-NEXT: rcrl %edi # sched: [3:0.75] -; BROADWELL-NEXT: rcll (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcrl (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcll $7, %edi # sched: [3:0.75] -; BROADWELL-NEXT: rcrl $7, %edi # sched: [3:0.75] -; BROADWELL-NEXT: rcll $7, (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcrl $7, (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcll %cl, %edi # sched: [11:2.00] -; BROADWELL-NEXT: rcrl %cl, %edi # sched: [11:2.00] -; BROADWELL-NEXT: rcll %cl, (%rdx) # sched: [15:2.00] -; BROADWELL-NEXT: rcrl %cl, (%rdx) # sched: [18:2.25] +; BROADWELL-NEXT: outsb (%rsi), %dx # sched: [100:0.25] +; BROADWELL-NEXT: outsw (%rsi), %dx # sched: [100:0.25] +; BROADWELL-NEXT: outsl (%rsi), %dx # sched: [100:0.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_rcl_rcr_32: +; SKYLAKE-LABEL: test_outs: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: rcll %edi # sched: [3:0.75] -; SKYLAKE-NEXT: rcrl %edi # sched: [3:0.75] -; SKYLAKE-NEXT: rcll (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcrl (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcll $7, %edi # sched: [3:0.75] -; SKYLAKE-NEXT: rcrl $7, %edi # sched: [3:0.75] -; SKYLAKE-NEXT: rcll $7, (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcrl $7, (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcll %cl, %edi # sched: [11:2.00] -; SKYLAKE-NEXT: rcrl %cl, %edi # sched: [11:2.00] -; SKYLAKE-NEXT: rcll %cl, (%rdx) # sched: [15:2.50] -; SKYLAKE-NEXT: rcrl %cl, (%rdx) # sched: [18:2.25] +; SKYLAKE-NEXT: outsb (%rsi), %dx # sched: [100:0.25] +; SKYLAKE-NEXT: outsw (%rsi), %dx # sched: [100:0.25] +; SKYLAKE-NEXT: outsl (%rsi), %dx # sched: [100:0.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_rcl_rcr_32: +; SKX-LABEL: test_outs: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: rcll %edi # sched: [3:0.75] -; SKX-NEXT: rcrl %edi # sched: [3:0.75] -; SKX-NEXT: rcll (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcrl (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcll $7, %edi # sched: [3:0.75] -; SKX-NEXT: rcrl $7, %edi # sched: [3:0.75] -; SKX-NEXT: rcll $7, (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcrl $7, (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcll %cl, %edi # sched: [11:2.00] -; SKX-NEXT: rcrl %cl, %edi # sched: [11:2.00] -; SKX-NEXT: rcll %cl, (%rdx) # sched: [15:2.50] -; SKX-NEXT: rcrl %cl, (%rdx) # sched: [18:2.25] +; SKX-NEXT: outsb (%rsi), %dx # sched: [100:0.25] +; SKX-NEXT: outsw (%rsi), %dx # sched: [100:0.25] +; SKX-NEXT: outsl (%rsi), %dx # sched: [100:0.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_rcl_rcr_32: +; BTVER2-LABEL: test_outs: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: rcll %edi # sched: [1:0.50] -; BTVER2-NEXT: rcrl %edi # sched: [1:0.50] -; BTVER2-NEXT: rcll (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrl (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcll $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: rcrl $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: rcll $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrl $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcll %cl, %edi # sched: [1:0.50] -; BTVER2-NEXT: rcrl %cl, %edi # sched: [1:0.50] -; BTVER2-NEXT: rcll %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrl %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: outsb (%rsi), %dx # sched: [100:0.17] +; BTVER2-NEXT: outsw (%rsi), %dx # sched: [100:0.17] +; BTVER2-NEXT: outsl (%rsi), %dx # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_rcl_rcr_32: +; ZNVER1-LABEL: test_outs: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: rcll %edi # sched: [1:0.25] -; ZNVER1-NEXT: rcrl %edi # sched: [1:0.25] -; ZNVER1-NEXT: rcll (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrl (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcll $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: rcrl $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: rcll $7, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrl $7, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcll %cl, %edi # sched: [1:0.25] -; ZNVER1-NEXT: rcrl %cl, %edi # sched: [1:0.25] -; ZNVER1-NEXT: rcll %cl, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrl %cl, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: outsb (%rsi), %dx # sched: [100:?] +; ZNVER1-NEXT: outsw (%rsi), %dx # sched: [100:?] +; ZNVER1-NEXT: outsl (%rsi), %dx # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "rcll $0 \0A\09 rcrl $0 \0A\09 rcll $2 \0A\09 rcrl $2 \0A\09 rcll $3, $0 \0A\09 rcrl $3, $0 \0A\09 rcll $3, $2 \0A\09 rcrl $3, $2 \0A\09 rcll %CL, $0 \0A\09 rcrl %CL, $0 \0A\09 rcll %CL, $2 \0A\09 rcrl %CL, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7) + call void asm sideeffect "outsb \0A\09 outsw \0A\09 outsl", ""() ret void } -define void @test_rcl_rcr_64(i64 %a0, i64 %a1, i64 *%a2) optsize { -; GENERIC-LABEL: test_rcl_rcr_64: + +define void @test_pause() optsize { +; GENERIC-LABEL: test_pause: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: rclq %rdi # sched: [1:0.50] -; GENERIC-NEXT: rcrq %rdi # sched: [1:0.50] -; GENERIC-NEXT: rclq (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrq (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rclq $7, %rdi # sched: [1:0.50] -; GENERIC-NEXT: rcrq $7, %rdi # sched: [1:0.50] -; GENERIC-NEXT: rclq $7, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrq $7, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rclq %cl, %rdi # sched: [1:0.50] -; GENERIC-NEXT: rcrq %cl, %rdi # sched: [1:0.50] -; GENERIC-NEXT: rclq %cl, (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rcrq %cl, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: pause # sched: [4:1.33] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_rcl_rcr_64: +; ATOM-LABEL: test_pause: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: rclq %rdi # sched: [1:1.00] -; ATOM-NEXT: rcrq %rdi # sched: [1:1.00] -; ATOM-NEXT: rclq (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrq (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rclq $7, %rdi # sched: [1:1.00] -; ATOM-NEXT: rcrq $7, %rdi # sched: [1:1.00] -; ATOM-NEXT: rclq $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrq $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rclq %cl, %rdi # sched: [1:1.00] -; ATOM-NEXT: rcrq %cl, %rdi # sched: [1:1.00] -; ATOM-NEXT: rclq %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rcrq %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: pause # sched: [17:8.50] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_rcl_rcr_64: +; SLM-LABEL: test_pause: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: rclq %rdi # sched: [1:1.00] -; SLM-NEXT: rcrq %rdi # sched: [1:1.00] -; SLM-NEXT: rclq (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrq (%rdx) # sched: [4:2.00] -; SLM-NEXT: rclq $7, %rdi # sched: [1:1.00] -; SLM-NEXT: rcrq $7, %rdi # sched: [1:1.00] -; SLM-NEXT: rclq $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrq $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rclq %cl, %rdi # sched: [1:1.00] -; SLM-NEXT: rcrq %cl, %rdi # sched: [1:1.00] -; SLM-NEXT: rclq %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rcrq %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: pause # sched: [1:?] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_rcl_rcr_64: +; SANDY-LABEL: test_pause: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: rclq %rdi # sched: [1:0.50] -; SANDY-NEXT: rcrq %rdi # sched: [1:0.50] -; SANDY-NEXT: rclq (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrq (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rclq $7, %rdi # sched: [1:0.50] -; SANDY-NEXT: rcrq $7, %rdi # sched: [1:0.50] -; SANDY-NEXT: rclq $7, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrq $7, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rclq %cl, %rdi # sched: [1:0.50] -; SANDY-NEXT: rcrq %cl, %rdi # sched: [1:0.50] -; SANDY-NEXT: rclq %cl, (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rcrq %cl, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: pause # sched: [4:1.33] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_rcl_rcr_64: +; HASWELL-LABEL: test_pause: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: rclq %rdi # sched: [3:0.75] -; HASWELL-NEXT: rcrq %rdi # sched: [3:0.75] -; HASWELL-NEXT: rclq (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcrq (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rclq $7, %rdi # sched: [3:0.75] -; HASWELL-NEXT: rcrq $7, %rdi # sched: [3:0.75] -; HASWELL-NEXT: rclq $7, (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rcrq $7, (%rdx) # sched: [9:0.75] -; HASWELL-NEXT: rclq %cl, %rdi # sched: [11:2.00] -; HASWELL-NEXT: rcrq %cl, %rdi # sched: [11:2.00] -; HASWELL-NEXT: rclq %cl, (%rdx) # sched: [16:2.00] -; HASWELL-NEXT: rcrq %cl, (%rdx) # sched: [19:2.25] +; HASWELL-NEXT: pause # sched: [5:1.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_rcl_rcr_64: +; BROADWELL-LABEL: test_pause: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: rclq %rdi # sched: [3:0.75] -; BROADWELL-NEXT: rcrq %rdi # sched: [3:0.75] -; BROADWELL-NEXT: rclq (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcrq (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rclq $7, %rdi # sched: [3:0.75] -; BROADWELL-NEXT: rcrq $7, %rdi # sched: [3:0.75] -; BROADWELL-NEXT: rclq $7, (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rcrq $7, (%rdx) # sched: [8:0.75] -; BROADWELL-NEXT: rclq %cl, %rdi # sched: [11:2.00] -; BROADWELL-NEXT: rcrq %cl, %rdi # sched: [11:2.00] -; BROADWELL-NEXT: rclq %cl, (%rdx) # sched: [15:2.00] -; BROADWELL-NEXT: rcrq %cl, (%rdx) # sched: [18:2.25] +; BROADWELL-NEXT: pause # sched: [5:1.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_rcl_rcr_64: +; SKYLAKE-LABEL: test_pause: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: rclq %rdi # sched: [3:0.75] -; SKYLAKE-NEXT: rcrq %rdi # sched: [3:0.75] -; SKYLAKE-NEXT: rclq (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcrq (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rclq $7, %rdi # sched: [3:0.75] -; SKYLAKE-NEXT: rcrq $7, %rdi # sched: [3:0.75] -; SKYLAKE-NEXT: rclq $7, (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rcrq $7, (%rdx) # sched: [8:0.75] -; SKYLAKE-NEXT: rclq %cl, %rdi # sched: [11:2.00] -; SKYLAKE-NEXT: rcrq %cl, %rdi # sched: [11:2.00] -; SKYLAKE-NEXT: rclq %cl, (%rdx) # sched: [15:2.50] -; SKYLAKE-NEXT: rcrq %cl, (%rdx) # sched: [18:2.25] +; SKYLAKE-NEXT: pause # sched: [4:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_rcl_rcr_64: +; SKX-LABEL: test_pause: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: rclq %rdi # sched: [3:0.75] -; SKX-NEXT: rcrq %rdi # sched: [3:0.75] -; SKX-NEXT: rclq (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcrq (%rdx) # sched: [8:0.75] -; SKX-NEXT: rclq $7, %rdi # sched: [3:0.75] -; SKX-NEXT: rcrq $7, %rdi # sched: [3:0.75] -; SKX-NEXT: rclq $7, (%rdx) # sched: [8:0.75] -; SKX-NEXT: rcrq $7, (%rdx) # sched: [8:0.75] -; SKX-NEXT: rclq %cl, %rdi # sched: [11:2.00] -; SKX-NEXT: rcrq %cl, %rdi # sched: [11:2.00] -; SKX-NEXT: rclq %cl, (%rdx) # sched: [15:2.50] -; SKX-NEXT: rcrq %cl, (%rdx) # sched: [18:2.25] +; SKX-NEXT: pause # sched: [140:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_rcl_rcr_64: +; BTVER2-LABEL: test_pause: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: rclq %rdi # sched: [1:0.50] -; BTVER2-NEXT: rcrq %rdi # sched: [1:0.50] -; BTVER2-NEXT: rclq (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrq (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rclq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: rcrq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: rclq $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrq $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rclq %cl, %rdi # sched: [1:0.50] -; BTVER2-NEXT: rcrq %cl, %rdi # sched: [1:0.50] -; BTVER2-NEXT: rclq %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rcrq %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: pause # sched: [1:?] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_rcl_rcr_64: +; ZNVER1-LABEL: test_pause: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: rclq %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rcrq %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rclq (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrq (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rclq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rcrq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rclq $7, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrq $7, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rclq %cl, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rcrq %cl, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rclq %cl, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: rcrq %cl, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: pause # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "rclq $0 \0A\09 rcrq $0 \0A\09 rclq $2 \0A\09 rcrq $2 \0A\09 rclq $3, $0 \0A\09 rcrq $3, $0 \0A\09 rclq $3, $2 \0A\09 rcrq $3, $2 \0A\09 rclq %CL, $0 \0A\09 rcrq %CL, $0 \0A\09 rclq %CL, $2 \0A\09 rcrq %CL, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7) + call void asm sideeffect "pause", ""() ret void } -; TODO - test_ret +; TODO - test_pop +; TODO - test_popa +; TODO - test_popf +; TODO - test_popfd +; TODO - test_popfq -define void @test_rol_ror_8(i8 %a0, i8 %a1, i8 *%a2) optsize { -; GENERIC-LABEL: test_rol_ror_8: +; TODO - test_prefetch +; TODO - test_prefetchw +; TODO - test_prefetchX + +; TODO - test_push +; TODO - test_pusha +; TODO - test_pushad +; TODO - test_pushf +; TODO - test_pushfd +; TODO - test_pushfq + +define void @test_rcl_rcr_8(i8 %a0, i8 %a1, i8 *%a2) optsize { +; GENERIC-LABEL: test_rcl_rcr_8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: rolb %dil # sched: [1:0.50] -; GENERIC-NEXT: rorb %dil # sched: [1:0.50] -; GENERIC-NEXT: rolb (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rorb (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rolb $7, %dil # sched: [2:1.00] -; GENERIC-NEXT: rorb $7, %dil # sched: [2:1.00] -; GENERIC-NEXT: rolb $7, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: rorb $7, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: rolb %cl, %dil # sched: [3:1.50] -; GENERIC-NEXT: rorb %cl, %dil # sched: [3:1.50] -; GENERIC-NEXT: rolb %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: rorb %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rclb %dil # sched: [1:0.50] +; GENERIC-NEXT: rcrb %dil # sched: [1:0.50] +; GENERIC-NEXT: rclb (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrb (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rclb $7, %dil # sched: [1:0.50] +; GENERIC-NEXT: rcrb $7, %dil # sched: [1:0.50] +; GENERIC-NEXT: rclb $7, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrb $7, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rclb %cl, %dil # sched: [1:0.50] +; GENERIC-NEXT: rcrb %cl, %dil # sched: [1:0.50] +; GENERIC-NEXT: rclb %cl, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrb %cl, (%rdx) # sched: [5:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_rol_ror_8: +; ATOM-LABEL: test_rcl_rcr_8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: rolb %dil # sched: [1:1.00] -; ATOM-NEXT: rorb %dil # sched: [1:1.00] -; ATOM-NEXT: rolb (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorb (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rolb $7, %dil # sched: [1:1.00] -; ATOM-NEXT: rorb $7, %dil # sched: [1:1.00] -; ATOM-NEXT: rolb $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorb $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rolb %cl, %dil # sched: [1:1.00] -; ATOM-NEXT: rorb %cl, %dil # sched: [1:1.00] -; ATOM-NEXT: rolb %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorb %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rclb %dil # sched: [1:1.00] +; ATOM-NEXT: rcrb %dil # sched: [1:1.00] +; ATOM-NEXT: rclb (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrb (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rclb $7, %dil # sched: [1:1.00] +; ATOM-NEXT: rcrb $7, %dil # sched: [1:1.00] +; ATOM-NEXT: rclb $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrb $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rclb %cl, %dil # sched: [1:1.00] +; ATOM-NEXT: rcrb %cl, %dil # sched: [1:1.00] +; ATOM-NEXT: rclb %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrb %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_rol_ror_8: +; SLM-LABEL: test_rcl_rcr_8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: rolb %dil # sched: [1:1.00] -; SLM-NEXT: rorb %dil # sched: [1:1.00] -; SLM-NEXT: rolb (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorb (%rdx) # sched: [4:2.00] -; SLM-NEXT: rolb $7, %dil # sched: [1:1.00] -; SLM-NEXT: rorb $7, %dil # sched: [1:1.00] -; SLM-NEXT: rolb $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorb $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rolb %cl, %dil # sched: [1:1.00] -; SLM-NEXT: rorb %cl, %dil # sched: [1:1.00] -; SLM-NEXT: rolb %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorb %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rclb %dil # sched: [1:1.00] +; SLM-NEXT: rcrb %dil # sched: [1:1.00] +; SLM-NEXT: rclb (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrb (%rdx) # sched: [4:2.00] +; SLM-NEXT: rclb $7, %dil # sched: [1:1.00] +; SLM-NEXT: rcrb $7, %dil # sched: [1:1.00] +; SLM-NEXT: rclb $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrb $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rclb %cl, %dil # sched: [1:1.00] +; SLM-NEXT: rcrb %cl, %dil # sched: [1:1.00] +; SLM-NEXT: rclb %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrb %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_rol_ror_8: +; SANDY-LABEL: test_rcl_rcr_8: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: rolb %dil # sched: [1:0.50] -; SANDY-NEXT: rorb %dil # sched: [1:0.50] -; SANDY-NEXT: rolb (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rorb (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rolb $7, %dil # sched: [2:1.00] -; SANDY-NEXT: rorb $7, %dil # sched: [2:1.00] -; SANDY-NEXT: rolb $7, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: rorb $7, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: rolb %cl, %dil # sched: [3:1.50] -; SANDY-NEXT: rorb %cl, %dil # sched: [3:1.50] -; SANDY-NEXT: rolb %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: rorb %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rclb %dil # sched: [1:0.50] +; SANDY-NEXT: rcrb %dil # sched: [1:0.50] +; SANDY-NEXT: rclb (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrb (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rclb $7, %dil # sched: [1:0.50] +; SANDY-NEXT: rcrb $7, %dil # sched: [1:0.50] +; SANDY-NEXT: rclb $7, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrb $7, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rclb %cl, %dil # sched: [1:0.50] +; SANDY-NEXT: rcrb %cl, %dil # sched: [1:0.50] +; SANDY-NEXT: rclb %cl, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrb %cl, (%rdx) # sched: [5:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_rol_ror_8: +; HASWELL-LABEL: test_rcl_rcr_8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: rolb %dil # sched: [2:1.00] -; HASWELL-NEXT: rorb %dil # sched: [2:1.00] -; HASWELL-NEXT: rolb (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rorb (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rolb $7, %dil # sched: [2:1.00] -; HASWELL-NEXT: rorb $7, %dil # sched: [2:1.00] -; HASWELL-NEXT: rolb $7, (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rorb $7, (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rolb %cl, %dil # sched: [3:1.00] -; HASWELL-NEXT: rorb %cl, %dil # sched: [3:1.00] -; HASWELL-NEXT: rolb %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: rorb %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rclb %dil # sched: [3:0.75] +; HASWELL-NEXT: rcrb %dil # sched: [3:0.75] +; HASWELL-NEXT: rclb (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcrb (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rclb $7, %dil # sched: [3:0.75] +; HASWELL-NEXT: rcrb $7, %dil # sched: [3:0.75] +; HASWELL-NEXT: rclb $7, (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcrb $7, (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rclb %cl, %dil # sched: [11:2.25] +; HASWELL-NEXT: rcrb %cl, %dil # sched: [14:2.50] +; HASWELL-NEXT: rclb %cl, (%rdx) # sched: [16:2.00] +; HASWELL-NEXT: rcrb %cl, (%rdx) # sched: [19:2.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_rol_ror_8: +; BROADWELL-LABEL: test_rcl_rcr_8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: rolb %dil # sched: [2:1.00] -; BROADWELL-NEXT: rorb %dil # sched: [2:1.00] -; BROADWELL-NEXT: rolb (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rorb (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rolb $7, %dil # sched: [2:1.00] -; BROADWELL-NEXT: rorb $7, %dil # sched: [2:1.00] -; BROADWELL-NEXT: rolb $7, (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rorb $7, (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rolb %cl, %dil # sched: [3:1.00] -; BROADWELL-NEXT: rorb %cl, %dil # sched: [3:1.00] -; BROADWELL-NEXT: rolb %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: rorb %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rclb %dil # sched: [3:0.75] +; BROADWELL-NEXT: rcrb %dil # sched: [3:0.75] +; BROADWELL-NEXT: rclb (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcrb (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rclb $7, %dil # sched: [3:0.75] +; BROADWELL-NEXT: rcrb $7, %dil # sched: [3:0.75] +; BROADWELL-NEXT: rclb $7, (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcrb $7, (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rclb %cl, %dil # sched: [11:2.25] +; BROADWELL-NEXT: rcrb %cl, %dil # sched: [14:2.50] +; BROADWELL-NEXT: rclb %cl, (%rdx) # sched: [15:2.00] +; BROADWELL-NEXT: rcrb %cl, (%rdx) # sched: [18:2.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_rol_ror_8: +; SKYLAKE-LABEL: test_rcl_rcr_8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: rolb %dil # sched: [2:1.00] -; SKYLAKE-NEXT: rorb %dil # sched: [2:1.00] -; SKYLAKE-NEXT: rolb (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rorb (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rolb $7, %dil # sched: [2:1.00] -; SKYLAKE-NEXT: rorb $7, %dil # sched: [2:1.00] -; SKYLAKE-NEXT: rolb $7, (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rorb $7, (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rolb %cl, %dil # sched: [3:1.50] -; SKYLAKE-NEXT: rorb %cl, %dil # sched: [3:1.50] -; SKYLAKE-NEXT: rolb %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: rorb %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rclb %dil # sched: [3:0.75] +; SKYLAKE-NEXT: rcrb %dil # sched: [3:0.75] +; SKYLAKE-NEXT: rclb (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcrb (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rclb $7, %dil # sched: [3:0.75] +; SKYLAKE-NEXT: rcrb $7, %dil # sched: [3:0.75] +; SKYLAKE-NEXT: rclb $7, (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcrb $7, (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rclb %cl, %dil # sched: [11:2.50] +; SKYLAKE-NEXT: rcrb %cl, %dil # sched: [14:2.50] +; SKYLAKE-NEXT: rclb %cl, (%rdx) # sched: [15:2.50] +; SKYLAKE-NEXT: rcrb %cl, (%rdx) # sched: [18:2.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_rol_ror_8: +; SKX-LABEL: test_rcl_rcr_8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: rolb %dil # sched: [2:1.00] -; SKX-NEXT: rorb %dil # sched: [2:1.00] -; SKX-NEXT: rolb (%rdx) # sched: [7:1.00] -; SKX-NEXT: rorb (%rdx) # sched: [7:1.00] -; SKX-NEXT: rolb $7, %dil # sched: [2:1.00] -; SKX-NEXT: rorb $7, %dil # sched: [2:1.00] -; SKX-NEXT: rolb $7, (%rdx) # sched: [7:1.00] -; SKX-NEXT: rorb $7, (%rdx) # sched: [7:1.00] -; SKX-NEXT: rolb %cl, %dil # sched: [3:1.50] -; SKX-NEXT: rorb %cl, %dil # sched: [3:1.50] -; SKX-NEXT: rolb %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: rorb %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rclb %dil # sched: [3:0.75] +; SKX-NEXT: rcrb %dil # sched: [3:0.75] +; SKX-NEXT: rclb (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcrb (%rdx) # sched: [8:0.75] +; SKX-NEXT: rclb $7, %dil # sched: [3:0.75] +; SKX-NEXT: rcrb $7, %dil # sched: [3:0.75] +; SKX-NEXT: rclb $7, (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcrb $7, (%rdx) # sched: [8:0.75] +; SKX-NEXT: rclb %cl, %dil # sched: [11:2.50] +; SKX-NEXT: rcrb %cl, %dil # sched: [14:2.50] +; SKX-NEXT: rclb %cl, (%rdx) # sched: [15:2.50] +; SKX-NEXT: rcrb %cl, (%rdx) # sched: [18:2.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_rol_ror_8: +; BTVER2-LABEL: test_rcl_rcr_8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: rolb %dil # sched: [1:0.50] -; BTVER2-NEXT: rorb %dil # sched: [1:0.50] -; BTVER2-NEXT: rolb (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorb (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rolb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: rorb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: rolb $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorb $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rolb %cl, %dil # sched: [1:0.50] -; BTVER2-NEXT: rorb %cl, %dil # sched: [1:0.50] -; BTVER2-NEXT: rolb %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorb %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rclb %dil # sched: [1:0.50] +; BTVER2-NEXT: rcrb %dil # sched: [1:0.50] +; BTVER2-NEXT: rclb (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrb (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rclb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: rcrb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: rclb $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrb $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rclb %cl, %dil # sched: [1:0.50] +; BTVER2-NEXT: rcrb %cl, %dil # sched: [1:0.50] +; BTVER2-NEXT: rclb %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrb %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_rol_ror_8: +; ZNVER1-LABEL: test_rcl_rcr_8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: rolb %dil # sched: [1:0.25] -; ZNVER1-NEXT: rorb %dil # sched: [1:0.25] -; ZNVER1-NEXT: rolb (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorb (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rolb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: rorb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: rolb $7, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorb $7, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rolb %cl, %dil # sched: [1:0.25] -; ZNVER1-NEXT: rorb %cl, %dil # sched: [1:0.25] -; ZNVER1-NEXT: rolb %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorb %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rclb %dil # sched: [1:0.25] +; ZNVER1-NEXT: rcrb %dil # sched: [1:0.25] +; ZNVER1-NEXT: rclb (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrb (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rclb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: rcrb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: rclb $7, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrb $7, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rclb %cl, %dil # sched: [1:0.25] +; ZNVER1-NEXT: rcrb %cl, %dil # sched: [1:0.25] +; ZNVER1-NEXT: rclb %cl, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrb %cl, (%rdx) # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "rolb $0 \0A\09 rorb $0 \0A\09 rolb $2 \0A\09 rorb $2 \0A\09 rolb $3, $0 \0A\09 rorb $3, $0 \0A\09 rolb $3, $2 \0A\09 rorb $3, $2 \0A\09 rolb %CL, $0 \0A\09 rorb %CL, $0 \0A\09 rolb %CL, $2 \0A\09 rorb %CL, $2", "r,r,*m,i"(i8 %a0, i8 %a1, i8 *%a2, i8 7) + call void asm sideeffect "rclb $0 \0A\09 rcrb $0 \0A\09 rclb $2 \0A\09 rcrb $2 \0A\09 rclb $3, $0 \0A\09 rcrb $3, $0 \0A\09 rclb $3, $2 \0A\09 rcrb $3, $2 \0A\09 rclb %CL, $0 \0A\09 rcrb %CL, $0 \0A\09 rclb %CL, $2 \0A\09 rcrb %CL, $2", "r,r,*m,i"(i8 %a0, i8 %a1, i8 *%a2, i8 7) ret void } -define void @test_rol_ror_16(i16 %a0, i16 %a1, i16 *%a2) optsize { -; GENERIC-LABEL: test_rol_ror_16: +define void @test_rcl_rcr_16(i16 %a0, i16 %a1, i16 *%a2) optsize { +; GENERIC-LABEL: test_rcl_rcr_16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: rolw %di # sched: [1:0.50] -; GENERIC-NEXT: rorw %di # sched: [1:0.50] -; GENERIC-NEXT: rolw (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rorw (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rolw $7, %di # sched: [2:1.00] -; GENERIC-NEXT: rorw $7, %di # sched: [2:1.00] -; GENERIC-NEXT: rolw $7, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: rorw $7, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: rolw %cl, %di # sched: [3:1.50] -; GENERIC-NEXT: rorw %cl, %di # sched: [3:1.50] -; GENERIC-NEXT: rolw %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: rorw %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rclw %di # sched: [1:0.50] +; GENERIC-NEXT: rcrw %di # sched: [1:0.50] +; GENERIC-NEXT: rclw (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrw (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rclw $7, %di # sched: [1:0.50] +; GENERIC-NEXT: rcrw $7, %di # sched: [1:0.50] +; GENERIC-NEXT: rclw $7, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrw $7, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rclw %cl, %di # sched: [1:0.50] +; GENERIC-NEXT: rcrw %cl, %di # sched: [1:0.50] +; GENERIC-NEXT: rclw %cl, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrw %cl, (%rdx) # sched: [5:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_rol_ror_16: +; ATOM-LABEL: test_rcl_rcr_16: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: rolw %di # sched: [1:1.00] -; ATOM-NEXT: rorw %di # sched: [1:1.00] -; ATOM-NEXT: rolw (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorw (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rolw $7, %di # sched: [1:1.00] -; ATOM-NEXT: rorw $7, %di # sched: [1:1.00] -; ATOM-NEXT: rolw $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorw $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rolw %cl, %di # sched: [1:1.00] -; ATOM-NEXT: rorw %cl, %di # sched: [1:1.00] -; ATOM-NEXT: rolw %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorw %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rclw %di # sched: [1:1.00] +; ATOM-NEXT: rcrw %di # sched: [1:1.00] +; ATOM-NEXT: rclw (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrw (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rclw $7, %di # sched: [1:1.00] +; ATOM-NEXT: rcrw $7, %di # sched: [1:1.00] +; ATOM-NEXT: rclw $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrw $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rclw %cl, %di # sched: [1:1.00] +; ATOM-NEXT: rcrw %cl, %di # sched: [1:1.00] +; ATOM-NEXT: rclw %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrw %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_rol_ror_16: +; SLM-LABEL: test_rcl_rcr_16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: rolw %di # sched: [1:1.00] -; SLM-NEXT: rorw %di # sched: [1:1.00] -; SLM-NEXT: rolw (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorw (%rdx) # sched: [4:2.00] -; SLM-NEXT: rolw $7, %di # sched: [1:1.00] -; SLM-NEXT: rorw $7, %di # sched: [1:1.00] -; SLM-NEXT: rolw $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorw $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rolw %cl, %di # sched: [1:1.00] -; SLM-NEXT: rorw %cl, %di # sched: [1:1.00] -; SLM-NEXT: rolw %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorw %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rclw %di # sched: [1:1.00] +; SLM-NEXT: rcrw %di # sched: [1:1.00] +; SLM-NEXT: rclw (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrw (%rdx) # sched: [4:2.00] +; SLM-NEXT: rclw $7, %di # sched: [1:1.00] +; SLM-NEXT: rcrw $7, %di # sched: [1:1.00] +; SLM-NEXT: rclw $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrw $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rclw %cl, %di # sched: [1:1.00] +; SLM-NEXT: rcrw %cl, %di # sched: [1:1.00] +; SLM-NEXT: rclw %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrw %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_rol_ror_16: +; SANDY-LABEL: test_rcl_rcr_16: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: rolw %di # sched: [1:0.50] -; SANDY-NEXT: rorw %di # sched: [1:0.50] -; SANDY-NEXT: rolw (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rorw (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rolw $7, %di # sched: [2:1.00] -; SANDY-NEXT: rorw $7, %di # sched: [2:1.00] -; SANDY-NEXT: rolw $7, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: rorw $7, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: rolw %cl, %di # sched: [3:1.50] -; SANDY-NEXT: rorw %cl, %di # sched: [3:1.50] -; SANDY-NEXT: rolw %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: rorw %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rclw %di # sched: [1:0.50] +; SANDY-NEXT: rcrw %di # sched: [1:0.50] +; SANDY-NEXT: rclw (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrw (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rclw $7, %di # sched: [1:0.50] +; SANDY-NEXT: rcrw $7, %di # sched: [1:0.50] +; SANDY-NEXT: rclw $7, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrw $7, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rclw %cl, %di # sched: [1:0.50] +; SANDY-NEXT: rcrw %cl, %di # sched: [1:0.50] +; SANDY-NEXT: rclw %cl, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrw %cl, (%rdx) # sched: [5:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_rol_ror_16: +; HASWELL-LABEL: test_rcl_rcr_16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: rolw %di # sched: [2:1.00] -; HASWELL-NEXT: rorw %di # sched: [2:1.00] -; HASWELL-NEXT: rolw (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rorw (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rolw $7, %di # sched: [2:1.00] -; HASWELL-NEXT: rorw $7, %di # sched: [2:1.00] -; HASWELL-NEXT: rolw $7, (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rorw $7, (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rolw %cl, %di # sched: [3:1.00] -; HASWELL-NEXT: rorw %cl, %di # sched: [3:1.00] -; HASWELL-NEXT: rolw %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: rorw %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rclw %di # sched: [3:0.75] +; HASWELL-NEXT: rcrw %di # sched: [3:0.75] +; HASWELL-NEXT: rclw (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcrw (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rclw $7, %di # sched: [3:0.75] +; HASWELL-NEXT: rcrw $7, %di # sched: [3:0.75] +; HASWELL-NEXT: rclw $7, (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcrw $7, (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rclw %cl, %di # sched: [11:2.00] +; HASWELL-NEXT: rcrw %cl, %di # sched: [11:2.00] +; HASWELL-NEXT: rclw %cl, (%rdx) # sched: [16:2.00] +; HASWELL-NEXT: rcrw %cl, (%rdx) # sched: [19:2.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_rol_ror_16: +; BROADWELL-LABEL: test_rcl_rcr_16: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: rolw %di # sched: [2:1.00] -; BROADWELL-NEXT: rorw %di # sched: [2:1.00] -; BROADWELL-NEXT: rolw (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rorw (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rolw $7, %di # sched: [2:1.00] -; BROADWELL-NEXT: rorw $7, %di # sched: [2:1.00] -; BROADWELL-NEXT: rolw $7, (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rorw $7, (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rolw %cl, %di # sched: [3:1.00] -; BROADWELL-NEXT: rorw %cl, %di # sched: [3:1.00] -; BROADWELL-NEXT: rolw %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: rorw %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rclw %di # sched: [3:0.75] +; BROADWELL-NEXT: rcrw %di # sched: [3:0.75] +; BROADWELL-NEXT: rclw (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcrw (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rclw $7, %di # sched: [3:0.75] +; BROADWELL-NEXT: rcrw $7, %di # sched: [3:0.75] +; BROADWELL-NEXT: rclw $7, (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcrw $7, (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rclw %cl, %di # sched: [11:2.00] +; BROADWELL-NEXT: rcrw %cl, %di # sched: [11:2.00] +; BROADWELL-NEXT: rclw %cl, (%rdx) # sched: [15:2.00] +; BROADWELL-NEXT: rcrw %cl, (%rdx) # sched: [18:2.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_rol_ror_16: +; SKYLAKE-LABEL: test_rcl_rcr_16: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: rolw %di # sched: [2:1.00] -; SKYLAKE-NEXT: rorw %di # sched: [2:1.00] -; SKYLAKE-NEXT: rolw (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rorw (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rolw $7, %di # sched: [2:1.00] -; SKYLAKE-NEXT: rorw $7, %di # sched: [2:1.00] -; SKYLAKE-NEXT: rolw $7, (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rorw $7, (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rolw %cl, %di # sched: [3:1.50] -; SKYLAKE-NEXT: rorw %cl, %di # sched: [3:1.50] -; SKYLAKE-NEXT: rolw %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: rorw %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rclw %di # sched: [3:0.75] +; SKYLAKE-NEXT: rcrw %di # sched: [3:0.75] +; SKYLAKE-NEXT: rclw (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcrw (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rclw $7, %di # sched: [3:0.75] +; SKYLAKE-NEXT: rcrw $7, %di # sched: [3:0.75] +; SKYLAKE-NEXT: rclw $7, (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcrw $7, (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rclw %cl, %di # sched: [11:2.00] +; SKYLAKE-NEXT: rcrw %cl, %di # sched: [11:2.00] +; SKYLAKE-NEXT: rclw %cl, (%rdx) # sched: [15:2.50] +; SKYLAKE-NEXT: rcrw %cl, (%rdx) # sched: [18:2.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_rol_ror_16: +; SKX-LABEL: test_rcl_rcr_16: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: rolw %di # sched: [2:1.00] -; SKX-NEXT: rorw %di # sched: [2:1.00] -; SKX-NEXT: rolw (%rdx) # sched: [7:1.00] -; SKX-NEXT: rorw (%rdx) # sched: [7:1.00] -; SKX-NEXT: rolw $7, %di # sched: [2:1.00] -; SKX-NEXT: rorw $7, %di # sched: [2:1.00] -; SKX-NEXT: rolw $7, (%rdx) # sched: [7:1.00] -; SKX-NEXT: rorw $7, (%rdx) # sched: [7:1.00] -; SKX-NEXT: rolw %cl, %di # sched: [3:1.50] -; SKX-NEXT: rorw %cl, %di # sched: [3:1.50] -; SKX-NEXT: rolw %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: rorw %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rclw %di # sched: [3:0.75] +; SKX-NEXT: rcrw %di # sched: [3:0.75] +; SKX-NEXT: rclw (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcrw (%rdx) # sched: [8:0.75] +; SKX-NEXT: rclw $7, %di # sched: [3:0.75] +; SKX-NEXT: rcrw $7, %di # sched: [3:0.75] +; SKX-NEXT: rclw $7, (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcrw $7, (%rdx) # sched: [8:0.75] +; SKX-NEXT: rclw %cl, %di # sched: [11:2.00] +; SKX-NEXT: rcrw %cl, %di # sched: [11:2.00] +; SKX-NEXT: rclw %cl, (%rdx) # sched: [15:2.50] +; SKX-NEXT: rcrw %cl, (%rdx) # sched: [18:2.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_rol_ror_16: +; BTVER2-LABEL: test_rcl_rcr_16: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: rolw %di # sched: [1:0.50] -; BTVER2-NEXT: rorw %di # sched: [1:0.50] -; BTVER2-NEXT: rolw (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorw (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rolw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: rorw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: rolw $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorw $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rolw %cl, %di # sched: [1:0.50] -; BTVER2-NEXT: rorw %cl, %di # sched: [1:0.50] -; BTVER2-NEXT: rolw %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorw %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rclw %di # sched: [1:0.50] +; BTVER2-NEXT: rcrw %di # sched: [1:0.50] +; BTVER2-NEXT: rclw (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrw (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rclw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: rcrw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: rclw $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrw $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rclw %cl, %di # sched: [1:0.50] +; BTVER2-NEXT: rcrw %cl, %di # sched: [1:0.50] +; BTVER2-NEXT: rclw %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrw %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_rol_ror_16: +; ZNVER1-LABEL: test_rcl_rcr_16: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: rolw %di # sched: [1:0.25] -; ZNVER1-NEXT: rorw %di # sched: [1:0.25] -; ZNVER1-NEXT: rolw (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorw (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rolw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: rorw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: rolw $7, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorw $7, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rolw %cl, %di # sched: [1:0.25] -; ZNVER1-NEXT: rorw %cl, %di # sched: [1:0.25] -; ZNVER1-NEXT: rolw %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorw %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rclw %di # sched: [1:0.25] +; ZNVER1-NEXT: rcrw %di # sched: [1:0.25] +; ZNVER1-NEXT: rclw (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrw (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rclw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: rcrw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: rclw $7, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrw $7, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rclw %cl, %di # sched: [1:0.25] +; ZNVER1-NEXT: rcrw %cl, %di # sched: [1:0.25] +; ZNVER1-NEXT: rclw %cl, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrw %cl, (%rdx) # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "rolw $0 \0A\09 rorw $0 \0A\09 rolw $2 \0A\09 rorw $2 \0A\09 rolw $3, $0 \0A\09 rorw $3, $0 \0A\09 rolw $3, $2 \0A\09 rorw $3, $2 \0A\09 rolw %CL, $0 \0A\09 rorw %CL, $0 \0A\09 rolw %CL, $2 \0A\09 rorw %CL, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7) + call void asm sideeffect "rclw $0 \0A\09 rcrw $0 \0A\09 rclw $2 \0A\09 rcrw $2 \0A\09 rclw $3, $0 \0A\09 rcrw $3, $0 \0A\09 rclw $3, $2 \0A\09 rcrw $3, $2 \0A\09 rclw %CL, $0 \0A\09 rcrw %CL, $0 \0A\09 rclw %CL, $2 \0A\09 rcrw %CL, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7) ret void } -define void @test_rol_ror_32(i32 %a0, i32 %a1, i32 *%a2) optsize { -; GENERIC-LABEL: test_rol_ror_32: +define void @test_rcl_rcr_32(i32 %a0, i32 %a1, i32 *%a2) optsize { +; GENERIC-LABEL: test_rcl_rcr_32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: roll %edi # sched: [1:0.50] -; GENERIC-NEXT: rorl %edi # sched: [1:0.50] -; GENERIC-NEXT: roll (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rorl (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: roll $7, %edi # sched: [2:1.00] -; GENERIC-NEXT: rorl $7, %edi # sched: [2:1.00] -; GENERIC-NEXT: roll $7, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: rorl $7, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: roll %cl, %edi # sched: [3:1.50] -; GENERIC-NEXT: rorl %cl, %edi # sched: [3:1.50] -; GENERIC-NEXT: roll %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: rorl %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rcll %edi # sched: [1:0.50] +; GENERIC-NEXT: rcrl %edi # sched: [1:0.50] +; GENERIC-NEXT: rcll (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrl (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcll $7, %edi # sched: [1:0.50] +; GENERIC-NEXT: rcrl $7, %edi # sched: [1:0.50] +; GENERIC-NEXT: rcll $7, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrl $7, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcll %cl, %edi # sched: [1:0.50] +; GENERIC-NEXT: rcrl %cl, %edi # sched: [1:0.50] +; GENERIC-NEXT: rcll %cl, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrl %cl, (%rdx) # sched: [5:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_rol_ror_32: +; ATOM-LABEL: test_rcl_rcr_32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: roll %edi # sched: [1:1.00] -; ATOM-NEXT: rorl %edi # sched: [1:1.00] -; ATOM-NEXT: roll (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorl (%rdx) # sched: [1:1.00] -; ATOM-NEXT: roll $7, %edi # sched: [1:1.00] -; ATOM-NEXT: rorl $7, %edi # sched: [1:1.00] -; ATOM-NEXT: roll $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorl $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: roll %cl, %edi # sched: [1:1.00] -; ATOM-NEXT: rorl %cl, %edi # sched: [1:1.00] -; ATOM-NEXT: roll %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorl %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcll %edi # sched: [1:1.00] +; ATOM-NEXT: rcrl %edi # sched: [1:1.00] +; ATOM-NEXT: rcll (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrl (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcll $7, %edi # sched: [1:1.00] +; ATOM-NEXT: rcrl $7, %edi # sched: [1:1.00] +; ATOM-NEXT: rcll $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrl $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcll %cl, %edi # sched: [1:1.00] +; ATOM-NEXT: rcrl %cl, %edi # sched: [1:1.00] +; ATOM-NEXT: rcll %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrl %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_rol_ror_32: +; SLM-LABEL: test_rcl_rcr_32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: roll %edi # sched: [1:1.00] -; SLM-NEXT: rorl %edi # sched: [1:1.00] -; SLM-NEXT: roll (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorl (%rdx) # sched: [4:2.00] -; SLM-NEXT: roll $7, %edi # sched: [1:1.00] -; SLM-NEXT: rorl $7, %edi # sched: [1:1.00] -; SLM-NEXT: roll $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorl $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: roll %cl, %edi # sched: [1:1.00] -; SLM-NEXT: rorl %cl, %edi # sched: [1:1.00] -; SLM-NEXT: roll %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorl %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: #NO_APP -; SLM-NEXT: retq # sched: [4:1.00] -; -; SANDY-LABEL: test_rol_ror_32: -; SANDY: # %bb.0: -; SANDY-NEXT: #APP -; SANDY-NEXT: roll %edi # sched: [1:0.50] -; SANDY-NEXT: rorl %edi # sched: [1:0.50] -; SANDY-NEXT: roll (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rorl (%rdx) # sched: [5:1.00] -; SANDY-NEXT: roll $7, %edi # sched: [2:1.00] -; SANDY-NEXT: rorl $7, %edi # sched: [2:1.00] -; SANDY-NEXT: roll $7, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: rorl $7, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: roll %cl, %edi # sched: [3:1.50] -; SANDY-NEXT: rorl %cl, %edi # sched: [3:1.50] -; SANDY-NEXT: roll %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: rorl %cl, (%rdx) # sched: [9:1.50] +; SLM-NEXT: rcll %edi # sched: [1:1.00] +; SLM-NEXT: rcrl %edi # sched: [1:1.00] +; SLM-NEXT: rcll (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrl (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcll $7, %edi # sched: [1:1.00] +; SLM-NEXT: rcrl $7, %edi # sched: [1:1.00] +; SLM-NEXT: rcll $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrl $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcll %cl, %edi # sched: [1:1.00] +; SLM-NEXT: rcrl %cl, %edi # sched: [1:1.00] +; SLM-NEXT: rcll %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrl %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_rcl_rcr_32: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: rcll %edi # sched: [1:0.50] +; SANDY-NEXT: rcrl %edi # sched: [1:0.50] +; SANDY-NEXT: rcll (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrl (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcll $7, %edi # sched: [1:0.50] +; SANDY-NEXT: rcrl $7, %edi # sched: [1:0.50] +; SANDY-NEXT: rcll $7, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrl $7, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcll %cl, %edi # sched: [1:0.50] +; SANDY-NEXT: rcrl %cl, %edi # sched: [1:0.50] +; SANDY-NEXT: rcll %cl, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrl %cl, (%rdx) # sched: [5:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_rol_ror_32: +; HASWELL-LABEL: test_rcl_rcr_32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: roll %edi # sched: [2:1.00] -; HASWELL-NEXT: rorl %edi # sched: [2:1.00] -; HASWELL-NEXT: roll (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rorl (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: roll $7, %edi # sched: [2:1.00] -; HASWELL-NEXT: rorl $7, %edi # sched: [2:1.00] -; HASWELL-NEXT: roll $7, (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rorl $7, (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: roll %cl, %edi # sched: [3:1.00] -; HASWELL-NEXT: rorl %cl, %edi # sched: [3:1.00] -; HASWELL-NEXT: roll %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: rorl %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rcll %edi # sched: [3:0.75] +; HASWELL-NEXT: rcrl %edi # sched: [3:0.75] +; HASWELL-NEXT: rcll (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcrl (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcll $7, %edi # sched: [3:0.75] +; HASWELL-NEXT: rcrl $7, %edi # sched: [3:0.75] +; HASWELL-NEXT: rcll $7, (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcrl $7, (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcll %cl, %edi # sched: [11:2.00] +; HASWELL-NEXT: rcrl %cl, %edi # sched: [11:2.00] +; HASWELL-NEXT: rcll %cl, (%rdx) # sched: [16:2.00] +; HASWELL-NEXT: rcrl %cl, (%rdx) # sched: [19:2.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_rol_ror_32: +; BROADWELL-LABEL: test_rcl_rcr_32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: roll %edi # sched: [2:1.00] -; BROADWELL-NEXT: rorl %edi # sched: [2:1.00] -; BROADWELL-NEXT: roll (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rorl (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: roll $7, %edi # sched: [2:1.00] -; BROADWELL-NEXT: rorl $7, %edi # sched: [2:1.00] -; BROADWELL-NEXT: roll $7, (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rorl $7, (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: roll %cl, %edi # sched: [3:1.00] -; BROADWELL-NEXT: rorl %cl, %edi # sched: [3:1.00] -; BROADWELL-NEXT: roll %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: rorl %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rcll %edi # sched: [3:0.75] +; BROADWELL-NEXT: rcrl %edi # sched: [3:0.75] +; BROADWELL-NEXT: rcll (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcrl (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcll $7, %edi # sched: [3:0.75] +; BROADWELL-NEXT: rcrl $7, %edi # sched: [3:0.75] +; BROADWELL-NEXT: rcll $7, (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcrl $7, (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcll %cl, %edi # sched: [11:2.00] +; BROADWELL-NEXT: rcrl %cl, %edi # sched: [11:2.00] +; BROADWELL-NEXT: rcll %cl, (%rdx) # sched: [15:2.00] +; BROADWELL-NEXT: rcrl %cl, (%rdx) # sched: [18:2.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_rol_ror_32: +; SKYLAKE-LABEL: test_rcl_rcr_32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: roll %edi # sched: [2:1.00] -; SKYLAKE-NEXT: rorl %edi # sched: [2:1.00] -; SKYLAKE-NEXT: roll (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rorl (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: roll $7, %edi # sched: [2:1.00] -; SKYLAKE-NEXT: rorl $7, %edi # sched: [2:1.00] -; SKYLAKE-NEXT: roll $7, (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rorl $7, (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: roll %cl, %edi # sched: [3:1.50] -; SKYLAKE-NEXT: rorl %cl, %edi # sched: [3:1.50] -; SKYLAKE-NEXT: roll %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: rorl %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rcll %edi # sched: [3:0.75] +; SKYLAKE-NEXT: rcrl %edi # sched: [3:0.75] +; SKYLAKE-NEXT: rcll (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcrl (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcll $7, %edi # sched: [3:0.75] +; SKYLAKE-NEXT: rcrl $7, %edi # sched: [3:0.75] +; SKYLAKE-NEXT: rcll $7, (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcrl $7, (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcll %cl, %edi # sched: [11:2.00] +; SKYLAKE-NEXT: rcrl %cl, %edi # sched: [11:2.00] +; SKYLAKE-NEXT: rcll %cl, (%rdx) # sched: [15:2.50] +; SKYLAKE-NEXT: rcrl %cl, (%rdx) # sched: [18:2.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_rol_ror_32: +; SKX-LABEL: test_rcl_rcr_32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: roll %edi # sched: [2:1.00] -; SKX-NEXT: rorl %edi # sched: [2:1.00] -; SKX-NEXT: roll (%rdx) # sched: [7:1.00] -; SKX-NEXT: rorl (%rdx) # sched: [7:1.00] -; SKX-NEXT: roll $7, %edi # sched: [2:1.00] -; SKX-NEXT: rorl $7, %edi # sched: [2:1.00] -; SKX-NEXT: roll $7, (%rdx) # sched: [7:1.00] -; SKX-NEXT: rorl $7, (%rdx) # sched: [7:1.00] -; SKX-NEXT: roll %cl, %edi # sched: [3:1.50] -; SKX-NEXT: rorl %cl, %edi # sched: [3:1.50] -; SKX-NEXT: roll %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: rorl %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rcll %edi # sched: [3:0.75] +; SKX-NEXT: rcrl %edi # sched: [3:0.75] +; SKX-NEXT: rcll (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcrl (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcll $7, %edi # sched: [3:0.75] +; SKX-NEXT: rcrl $7, %edi # sched: [3:0.75] +; SKX-NEXT: rcll $7, (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcrl $7, (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcll %cl, %edi # sched: [11:2.00] +; SKX-NEXT: rcrl %cl, %edi # sched: [11:2.00] +; SKX-NEXT: rcll %cl, (%rdx) # sched: [15:2.50] +; SKX-NEXT: rcrl %cl, (%rdx) # sched: [18:2.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_rol_ror_32: +; BTVER2-LABEL: test_rcl_rcr_32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: roll %edi # sched: [1:0.50] -; BTVER2-NEXT: rorl %edi # sched: [1:0.50] -; BTVER2-NEXT: roll (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorl (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: roll $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: rorl $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: roll $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorl $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: roll %cl, %edi # sched: [1:0.50] -; BTVER2-NEXT: rorl %cl, %edi # sched: [1:0.50] -; BTVER2-NEXT: roll %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorl %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcll %edi # sched: [1:0.50] +; BTVER2-NEXT: rcrl %edi # sched: [1:0.50] +; BTVER2-NEXT: rcll (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrl (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcll $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: rcrl $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: rcll $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrl $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcll %cl, %edi # sched: [1:0.50] +; BTVER2-NEXT: rcrl %cl, %edi # sched: [1:0.50] +; BTVER2-NEXT: rcll %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrl %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_rol_ror_32: +; ZNVER1-LABEL: test_rcl_rcr_32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: roll %edi # sched: [1:0.25] -; ZNVER1-NEXT: rorl %edi # sched: [1:0.25] -; ZNVER1-NEXT: roll (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorl (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: roll $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: rorl $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: roll $7, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorl $7, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: roll %cl, %edi # sched: [1:0.25] -; ZNVER1-NEXT: rorl %cl, %edi # sched: [1:0.25] -; ZNVER1-NEXT: roll %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorl %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rcll %edi # sched: [1:0.25] +; ZNVER1-NEXT: rcrl %edi # sched: [1:0.25] +; ZNVER1-NEXT: rcll (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrl (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcll $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: rcrl $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: rcll $7, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrl $7, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcll %cl, %edi # sched: [1:0.25] +; ZNVER1-NEXT: rcrl %cl, %edi # sched: [1:0.25] +; ZNVER1-NEXT: rcll %cl, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrl %cl, (%rdx) # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "roll $0 \0A\09 rorl $0 \0A\09 roll $2 \0A\09 rorl $2 \0A\09 roll $3, $0 \0A\09 rorl $3, $0 \0A\09 roll $3, $2 \0A\09 rorl $3, $2 \0A\09 roll %CL, $0 \0A\09 rorl %CL, $0 \0A\09 roll %CL, $2 \0A\09 rorl %CL, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7) + call void asm sideeffect "rcll $0 \0A\09 rcrl $0 \0A\09 rcll $2 \0A\09 rcrl $2 \0A\09 rcll $3, $0 \0A\09 rcrl $3, $0 \0A\09 rcll $3, $2 \0A\09 rcrl $3, $2 \0A\09 rcll %CL, $0 \0A\09 rcrl %CL, $0 \0A\09 rcll %CL, $2 \0A\09 rcrl %CL, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7) ret void } -define void @test_rol_ror_64(i64 %a0, i64 %a1, i64 *%a2) optsize { -; GENERIC-LABEL: test_rol_ror_64: +define void @test_rcl_rcr_64(i64 %a0, i64 %a1, i64 *%a2) optsize { +; GENERIC-LABEL: test_rcl_rcr_64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: rolq %rdi # sched: [1:0.50] -; GENERIC-NEXT: rorq %rdi # sched: [1:0.50] -; GENERIC-NEXT: rolq (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rorq (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: rolq $7, %rdi # sched: [2:1.00] -; GENERIC-NEXT: rorq $7, %rdi # sched: [2:1.00] -; GENERIC-NEXT: rolq $7, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: rorq $7, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: rolq %cl, %rdi # sched: [3:1.50] -; GENERIC-NEXT: rorq %cl, %rdi # sched: [3:1.50] -; GENERIC-NEXT: rolq %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: rorq %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rclq %rdi # sched: [1:0.50] +; GENERIC-NEXT: rcrq %rdi # sched: [1:0.50] +; GENERIC-NEXT: rclq (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrq (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rclq $7, %rdi # sched: [1:0.50] +; GENERIC-NEXT: rcrq $7, %rdi # sched: [1:0.50] +; GENERIC-NEXT: rclq $7, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrq $7, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rclq %cl, %rdi # sched: [1:0.50] +; GENERIC-NEXT: rcrq %cl, %rdi # sched: [1:0.50] +; GENERIC-NEXT: rclq %cl, (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rcrq %cl, (%rdx) # sched: [5:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_rol_ror_64: +; ATOM-LABEL: test_rcl_rcr_64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: rolq %rdi # sched: [1:1.00] -; ATOM-NEXT: rorq %rdi # sched: [1:1.00] -; ATOM-NEXT: rolq (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorq (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rolq $7, %rdi # sched: [1:1.00] -; ATOM-NEXT: rorq $7, %rdi # sched: [1:1.00] -; ATOM-NEXT: rolq $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorq $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rolq %cl, %rdi # sched: [1:1.00] -; ATOM-NEXT: rorq %cl, %rdi # sched: [1:1.00] -; ATOM-NEXT: rolq %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: rorq %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rclq %rdi # sched: [1:1.00] +; ATOM-NEXT: rcrq %rdi # sched: [1:1.00] +; ATOM-NEXT: rclq (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrq (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rclq $7, %rdi # sched: [1:1.00] +; ATOM-NEXT: rcrq $7, %rdi # sched: [1:1.00] +; ATOM-NEXT: rclq $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrq $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rclq %cl, %rdi # sched: [1:1.00] +; ATOM-NEXT: rcrq %cl, %rdi # sched: [1:1.00] +; ATOM-NEXT: rclq %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rcrq %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_rol_ror_64: +; SLM-LABEL: test_rcl_rcr_64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: rolq %rdi # sched: [1:1.00] -; SLM-NEXT: rorq %rdi # sched: [1:1.00] -; SLM-NEXT: rolq (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorq (%rdx) # sched: [4:2.00] -; SLM-NEXT: rolq $7, %rdi # sched: [1:1.00] -; SLM-NEXT: rorq $7, %rdi # sched: [1:1.00] -; SLM-NEXT: rolq $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorq $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rolq %cl, %rdi # sched: [1:1.00] -; SLM-NEXT: rorq %cl, %rdi # sched: [1:1.00] -; SLM-NEXT: rolq %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: rorq %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rclq %rdi # sched: [1:1.00] +; SLM-NEXT: rcrq %rdi # sched: [1:1.00] +; SLM-NEXT: rclq (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrq (%rdx) # sched: [4:2.00] +; SLM-NEXT: rclq $7, %rdi # sched: [1:1.00] +; SLM-NEXT: rcrq $7, %rdi # sched: [1:1.00] +; SLM-NEXT: rclq $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrq $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rclq %cl, %rdi # sched: [1:1.00] +; SLM-NEXT: rcrq %cl, %rdi # sched: [1:1.00] +; SLM-NEXT: rclq %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rcrq %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_rol_ror_64: +; SANDY-LABEL: test_rcl_rcr_64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: rolq %rdi # sched: [1:0.50] -; SANDY-NEXT: rorq %rdi # sched: [1:0.50] -; SANDY-NEXT: rolq (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rorq (%rdx) # sched: [5:1.00] -; SANDY-NEXT: rolq $7, %rdi # sched: [2:1.00] -; SANDY-NEXT: rorq $7, %rdi # sched: [2:1.00] -; SANDY-NEXT: rolq $7, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: rorq $7, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: rolq %cl, %rdi # sched: [3:1.50] -; SANDY-NEXT: rorq %cl, %rdi # sched: [3:1.50] -; SANDY-NEXT: rolq %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: rorq %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rclq %rdi # sched: [1:0.50] +; SANDY-NEXT: rcrq %rdi # sched: [1:0.50] +; SANDY-NEXT: rclq (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrq (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rclq $7, %rdi # sched: [1:0.50] +; SANDY-NEXT: rcrq $7, %rdi # sched: [1:0.50] +; SANDY-NEXT: rclq $7, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrq $7, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rclq %cl, %rdi # sched: [1:0.50] +; SANDY-NEXT: rcrq %cl, %rdi # sched: [1:0.50] +; SANDY-NEXT: rclq %cl, (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rcrq %cl, (%rdx) # sched: [5:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_rol_ror_64: +; HASWELL-LABEL: test_rcl_rcr_64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: rolq %rdi # sched: [2:1.00] -; HASWELL-NEXT: rorq %rdi # sched: [2:1.00] -; HASWELL-NEXT: rolq (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rorq (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rolq $7, %rdi # sched: [2:1.00] -; HASWELL-NEXT: rorq $7, %rdi # sched: [2:1.00] -; HASWELL-NEXT: rolq $7, (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rorq $7, (%rdx) # sched: [8:1.00] -; HASWELL-NEXT: rolq %cl, %rdi # sched: [3:1.00] -; HASWELL-NEXT: rorq %cl, %rdi # sched: [3:1.00] -; HASWELL-NEXT: rolq %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: rorq %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rclq %rdi # sched: [3:0.75] +; HASWELL-NEXT: rcrq %rdi # sched: [3:0.75] +; HASWELL-NEXT: rclq (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcrq (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rclq $7, %rdi # sched: [3:0.75] +; HASWELL-NEXT: rcrq $7, %rdi # sched: [3:0.75] +; HASWELL-NEXT: rclq $7, (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rcrq $7, (%rdx) # sched: [9:0.75] +; HASWELL-NEXT: rclq %cl, %rdi # sched: [11:2.00] +; HASWELL-NEXT: rcrq %cl, %rdi # sched: [11:2.00] +; HASWELL-NEXT: rclq %cl, (%rdx) # sched: [16:2.00] +; HASWELL-NEXT: rcrq %cl, (%rdx) # sched: [19:2.25] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_rol_ror_64: +; BROADWELL-LABEL: test_rcl_rcr_64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: rolq %rdi # sched: [2:1.00] -; BROADWELL-NEXT: rorq %rdi # sched: [2:1.00] -; BROADWELL-NEXT: rolq (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rorq (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rolq $7, %rdi # sched: [2:1.00] -; BROADWELL-NEXT: rorq $7, %rdi # sched: [2:1.00] -; BROADWELL-NEXT: rolq $7, (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rorq $7, (%rdx) # sched: [7:1.00] -; BROADWELL-NEXT: rolq %cl, %rdi # sched: [3:1.00] -; BROADWELL-NEXT: rorq %cl, %rdi # sched: [3:1.00] -; BROADWELL-NEXT: rolq %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: rorq %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rclq %rdi # sched: [3:0.75] +; BROADWELL-NEXT: rcrq %rdi # sched: [3:0.75] +; BROADWELL-NEXT: rclq (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcrq (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rclq $7, %rdi # sched: [3:0.75] +; BROADWELL-NEXT: rcrq $7, %rdi # sched: [3:0.75] +; BROADWELL-NEXT: rclq $7, (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rcrq $7, (%rdx) # sched: [8:0.75] +; BROADWELL-NEXT: rclq %cl, %rdi # sched: [11:2.00] +; BROADWELL-NEXT: rcrq %cl, %rdi # sched: [11:2.00] +; BROADWELL-NEXT: rclq %cl, (%rdx) # sched: [15:2.00] +; BROADWELL-NEXT: rcrq %cl, (%rdx) # sched: [18:2.25] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_rol_ror_64: +; SKYLAKE-LABEL: test_rcl_rcr_64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: rolq %rdi # sched: [2:1.00] -; SKYLAKE-NEXT: rorq %rdi # sched: [2:1.00] -; SKYLAKE-NEXT: rolq (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rorq (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rolq $7, %rdi # sched: [2:1.00] -; SKYLAKE-NEXT: rorq $7, %rdi # sched: [2:1.00] -; SKYLAKE-NEXT: rolq $7, (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rorq $7, (%rdx) # sched: [7:1.00] -; SKYLAKE-NEXT: rolq %cl, %rdi # sched: [3:1.50] -; SKYLAKE-NEXT: rorq %cl, %rdi # sched: [3:1.50] -; SKYLAKE-NEXT: rolq %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: rorq %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rclq %rdi # sched: [3:0.75] +; SKYLAKE-NEXT: rcrq %rdi # sched: [3:0.75] +; SKYLAKE-NEXT: rclq (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcrq (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rclq $7, %rdi # sched: [3:0.75] +; SKYLAKE-NEXT: rcrq $7, %rdi # sched: [3:0.75] +; SKYLAKE-NEXT: rclq $7, (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rcrq $7, (%rdx) # sched: [8:0.75] +; SKYLAKE-NEXT: rclq %cl, %rdi # sched: [11:2.00] +; SKYLAKE-NEXT: rcrq %cl, %rdi # sched: [11:2.00] +; SKYLAKE-NEXT: rclq %cl, (%rdx) # sched: [15:2.50] +; SKYLAKE-NEXT: rcrq %cl, (%rdx) # sched: [18:2.25] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_rol_ror_64: +; SKX-LABEL: test_rcl_rcr_64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: rolq %rdi # sched: [2:1.00] -; SKX-NEXT: rorq %rdi # sched: [2:1.00] -; SKX-NEXT: rolq (%rdx) # sched: [7:1.00] -; SKX-NEXT: rorq (%rdx) # sched: [7:1.00] -; SKX-NEXT: rolq $7, %rdi # sched: [2:1.00] -; SKX-NEXT: rorq $7, %rdi # sched: [2:1.00] -; SKX-NEXT: rolq $7, (%rdx) # sched: [7:1.00] -; SKX-NEXT: rorq $7, (%rdx) # sched: [7:1.00] -; SKX-NEXT: rolq %cl, %rdi # sched: [3:1.50] -; SKX-NEXT: rorq %cl, %rdi # sched: [3:1.50] -; SKX-NEXT: rolq %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: rorq %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rclq %rdi # sched: [3:0.75] +; SKX-NEXT: rcrq %rdi # sched: [3:0.75] +; SKX-NEXT: rclq (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcrq (%rdx) # sched: [8:0.75] +; SKX-NEXT: rclq $7, %rdi # sched: [3:0.75] +; SKX-NEXT: rcrq $7, %rdi # sched: [3:0.75] +; SKX-NEXT: rclq $7, (%rdx) # sched: [8:0.75] +; SKX-NEXT: rcrq $7, (%rdx) # sched: [8:0.75] +; SKX-NEXT: rclq %cl, %rdi # sched: [11:2.00] +; SKX-NEXT: rcrq %cl, %rdi # sched: [11:2.00] +; SKX-NEXT: rclq %cl, (%rdx) # sched: [15:2.50] +; SKX-NEXT: rcrq %cl, (%rdx) # sched: [18:2.25] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_rol_ror_64: +; BTVER2-LABEL: test_rcl_rcr_64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: rolq %rdi # sched: [1:0.50] -; BTVER2-NEXT: rorq %rdi # sched: [1:0.50] -; BTVER2-NEXT: rolq (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorq (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rolq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: rorq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: rolq $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorq $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rolq %cl, %rdi # sched: [1:0.50] -; BTVER2-NEXT: rorq %cl, %rdi # sched: [1:0.50] -; BTVER2-NEXT: rolq %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: rorq %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rclq %rdi # sched: [1:0.50] +; BTVER2-NEXT: rcrq %rdi # sched: [1:0.50] +; BTVER2-NEXT: rclq (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrq (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rclq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: rcrq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: rclq $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrq $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rclq %cl, %rdi # sched: [1:0.50] +; BTVER2-NEXT: rcrq %cl, %rdi # sched: [1:0.50] +; BTVER2-NEXT: rclq %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rcrq %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_rol_ror_64: +; ZNVER1-LABEL: test_rcl_rcr_64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: rolq %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rorq %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rolq (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorq (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rolq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rorq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rolq $7, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorq $7, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rolq %cl, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rorq %cl, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: rolq %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: rorq %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rclq %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rcrq %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rclq (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrq (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rclq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rcrq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rclq $7, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrq $7, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rclq %cl, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rcrq %cl, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rclq %cl, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: rcrq %cl, (%rdx) # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "rolq $0 \0A\09 rorq $0 \0A\09 rolq $2 \0A\09 rorq $2 \0A\09 rolq $3, $0 \0A\09 rorq $3, $0 \0A\09 rolq $3, $2 \0A\09 rorq $3, $2 \0A\09 rolq %CL, $0 \0A\09 rorq %CL, $0 \0A\09 rolq %CL, $2 \0A\09 rorq %CL, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7) + call void asm sideeffect "rclq $0 \0A\09 rcrq $0 \0A\09 rclq $2 \0A\09 rcrq $2 \0A\09 rclq $3, $0 \0A\09 rcrq $3, $0 \0A\09 rclq $3, $2 \0A\09 rcrq $3, $2 \0A\09 rclq %CL, $0 \0A\09 rcrq %CL, $0 \0A\09 rclq %CL, $2 \0A\09 rcrq %CL, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7) ret void } -define void @test_sar_shl_shr_8(i8 %a0, i8 %a1, i8 *%a2) optsize { -; GENERIC-LABEL: test_sar_shl_shr_8: +; TODO - test_ret + +define void @test_rol_ror_8(i8 %a0, i8 %a1, i8 *%a2) optsize { +; GENERIC-LABEL: test_rol_ror_8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: sarb %dil # sched: [1:0.50] -; GENERIC-NEXT: shlb %dil # sched: [1:0.50] -; GENERIC-NEXT: shrb %dil # sched: [1:0.50] -; GENERIC-NEXT: sarb (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: shlb (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shrb (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: sarb $7, %dil # sched: [1:0.50] -; GENERIC-NEXT: shlb $7, %dil # sched: [1:0.50] -; GENERIC-NEXT: shrb $7, %dil # sched: [1:0.50] -; GENERIC-NEXT: sarb $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shlb $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shrb $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: sarb %cl, %dil # sched: [3:1.50] -; GENERIC-NEXT: shlb %cl, %dil # sched: [3:1.50] -; GENERIC-NEXT: shrb %cl, %dil # sched: [3:1.50] -; GENERIC-NEXT: sarb %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: shlb %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: shrb %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rolb %dil # sched: [1:0.50] +; GENERIC-NEXT: rorb %dil # sched: [1:0.50] +; GENERIC-NEXT: rolb (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rorb (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rolb $7, %dil # sched: [2:1.00] +; GENERIC-NEXT: rorb $7, %dil # sched: [2:1.00] +; GENERIC-NEXT: rolb $7, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: rorb $7, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: rolb %cl, %dil # sched: [3:1.50] +; GENERIC-NEXT: rorb %cl, %dil # sched: [3:1.50] +; GENERIC-NEXT: rolb %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rorb %cl, (%rdx) # sched: [9:1.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sar_shl_shr_8: +; ATOM-LABEL: test_rol_ror_8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: sarb %dil # sched: [1:1.00] -; ATOM-NEXT: shlb %dil # sched: [1:1.00] -; ATOM-NEXT: shrb %dil # sched: [1:1.00] -; ATOM-NEXT: sarb (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shlb (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrb (%rdx) # sched: [1:1.00] -; ATOM-NEXT: sarb $7, %dil # sched: [1:1.00] -; ATOM-NEXT: shlb $7, %dil # sched: [1:1.00] -; ATOM-NEXT: shrb $7, %dil # sched: [1:1.00] -; ATOM-NEXT: sarb $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shlb $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrb $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: sarb %cl, %dil # sched: [1:1.00] -; ATOM-NEXT: shlb %cl, %dil # sched: [1:1.00] -; ATOM-NEXT: shrb %cl, %dil # sched: [1:1.00] -; ATOM-NEXT: sarb %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shlb %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrb %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rolb %dil # sched: [1:1.00] +; ATOM-NEXT: rorb %dil # sched: [1:1.00] +; ATOM-NEXT: rolb (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorb (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rolb $7, %dil # sched: [1:1.00] +; ATOM-NEXT: rorb $7, %dil # sched: [1:1.00] +; ATOM-NEXT: rolb $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorb $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rolb %cl, %dil # sched: [1:1.00] +; ATOM-NEXT: rorb %cl, %dil # sched: [1:1.00] +; ATOM-NEXT: rolb %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorb %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sar_shl_shr_8: +; SLM-LABEL: test_rol_ror_8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: sarb %dil # sched: [1:1.00] -; SLM-NEXT: shlb %dil # sched: [1:1.00] -; SLM-NEXT: shrb %dil # sched: [1:1.00] -; SLM-NEXT: sarb (%rdx) # sched: [4:2.00] -; SLM-NEXT: shlb (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrb (%rdx) # sched: [4:2.00] -; SLM-NEXT: sarb $7, %dil # sched: [1:1.00] -; SLM-NEXT: shlb $7, %dil # sched: [1:1.00] -; SLM-NEXT: shrb $7, %dil # sched: [1:1.00] -; SLM-NEXT: sarb $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shlb $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrb $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: sarb %cl, %dil # sched: [1:1.00] -; SLM-NEXT: shlb %cl, %dil # sched: [1:1.00] -; SLM-NEXT: shrb %cl, %dil # sched: [1:1.00] -; SLM-NEXT: sarb %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shlb %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrb %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rolb %dil # sched: [1:1.00] +; SLM-NEXT: rorb %dil # sched: [1:1.00] +; SLM-NEXT: rolb (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorb (%rdx) # sched: [4:2.00] +; SLM-NEXT: rolb $7, %dil # sched: [1:1.00] +; SLM-NEXT: rorb $7, %dil # sched: [1:1.00] +; SLM-NEXT: rolb $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorb $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rolb %cl, %dil # sched: [1:1.00] +; SLM-NEXT: rorb %cl, %dil # sched: [1:1.00] +; SLM-NEXT: rolb %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorb %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sar_shl_shr_8: +; SANDY-LABEL: test_rol_ror_8: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: sarb %dil # sched: [1:0.50] -; SANDY-NEXT: shlb %dil # sched: [1:0.50] -; SANDY-NEXT: shrb %dil # sched: [1:0.50] -; SANDY-NEXT: sarb (%rdx) # sched: [5:1.00] -; SANDY-NEXT: shlb (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shrb (%rdx) # sched: [5:1.00] -; SANDY-NEXT: sarb $7, %dil # sched: [1:0.50] -; SANDY-NEXT: shlb $7, %dil # sched: [1:0.50] -; SANDY-NEXT: shrb $7, %dil # sched: [1:0.50] -; SANDY-NEXT: sarb $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shlb $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shrb $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: sarb %cl, %dil # sched: [3:1.50] -; SANDY-NEXT: shlb %cl, %dil # sched: [3:1.50] -; SANDY-NEXT: shrb %cl, %dil # sched: [3:1.50] -; SANDY-NEXT: sarb %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: shlb %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: shrb %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rolb %dil # sched: [1:0.50] +; SANDY-NEXT: rorb %dil # sched: [1:0.50] +; SANDY-NEXT: rolb (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rorb (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rolb $7, %dil # sched: [2:1.00] +; SANDY-NEXT: rorb $7, %dil # sched: [2:1.00] +; SANDY-NEXT: rolb $7, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: rorb $7, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: rolb %cl, %dil # sched: [3:1.50] +; SANDY-NEXT: rorb %cl, %dil # sched: [3:1.50] +; SANDY-NEXT: rolb %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rorb %cl, (%rdx) # sched: [9:1.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sar_shl_shr_8: +; HASWELL-LABEL: test_rol_ror_8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: sarb %dil # sched: [1:0.50] -; HASWELL-NEXT: shlb %dil # sched: [1:0.50] -; HASWELL-NEXT: shrb %dil # sched: [1:0.50] -; HASWELL-NEXT: sarb (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shlb (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shrb (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: sarb $7, %dil # sched: [1:0.50] -; HASWELL-NEXT: shlb $7, %dil # sched: [1:0.50] -; HASWELL-NEXT: shrb $7, %dil # sched: [1:0.50] -; HASWELL-NEXT: sarb $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shlb $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shrb $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: sarb %cl, %dil # sched: [3:1.00] -; HASWELL-NEXT: shlb %cl, %dil # sched: [3:1.00] -; HASWELL-NEXT: shrb %cl, %dil # sched: [3:1.00] -; HASWELL-NEXT: sarb %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: shlb %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: shrb %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rolb %dil # sched: [2:1.00] +; HASWELL-NEXT: rorb %dil # sched: [2:1.00] +; HASWELL-NEXT: rolb (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rorb (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rolb $7, %dil # sched: [2:1.00] +; HASWELL-NEXT: rorb $7, %dil # sched: [2:1.00] +; HASWELL-NEXT: rolb $7, (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rorb $7, (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rolb %cl, %dil # sched: [3:1.00] +; HASWELL-NEXT: rorb %cl, %dil # sched: [3:1.00] +; HASWELL-NEXT: rolb %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rorb %cl, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sar_shl_shr_8: +; BROADWELL-LABEL: test_rol_ror_8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: sarb %dil # sched: [1:0.50] -; BROADWELL-NEXT: shlb %dil # sched: [1:0.50] -; BROADWELL-NEXT: shrb %dil # sched: [1:0.50] -; BROADWELL-NEXT: sarb (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shlb (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shrb (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: sarb $7, %dil # sched: [1:0.50] -; BROADWELL-NEXT: shlb $7, %dil # sched: [1:0.50] -; BROADWELL-NEXT: shrb $7, %dil # sched: [1:0.50] -; BROADWELL-NEXT: sarb $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shlb $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shrb $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: sarb %cl, %dil # sched: [3:1.00] -; BROADWELL-NEXT: shlb %cl, %dil # sched: [3:1.00] -; BROADWELL-NEXT: shrb %cl, %dil # sched: [3:1.00] -; BROADWELL-NEXT: sarb %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: shlb %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: shrb %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rolb %dil # sched: [2:1.00] +; BROADWELL-NEXT: rorb %dil # sched: [2:1.00] +; BROADWELL-NEXT: rolb (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rorb (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rolb $7, %dil # sched: [2:1.00] +; BROADWELL-NEXT: rorb $7, %dil # sched: [2:1.00] +; BROADWELL-NEXT: rolb $7, (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rorb $7, (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rolb %cl, %dil # sched: [3:1.00] +; BROADWELL-NEXT: rorb %cl, %dil # sched: [3:1.00] +; BROADWELL-NEXT: rolb %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rorb %cl, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sar_shl_shr_8: +; SKYLAKE-LABEL: test_rol_ror_8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: sarb %dil # sched: [1:0.50] -; SKYLAKE-NEXT: shlb %dil # sched: [1:0.50] -; SKYLAKE-NEXT: shrb %dil # sched: [1:0.50] -; SKYLAKE-NEXT: sarb (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shlb (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shrb (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: sarb $7, %dil # sched: [1:0.50] -; SKYLAKE-NEXT: shlb $7, %dil # sched: [1:0.50] -; SKYLAKE-NEXT: shrb $7, %dil # sched: [1:0.50] -; SKYLAKE-NEXT: sarb $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shlb $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shrb $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: sarb %cl, %dil # sched: [3:1.50] -; SKYLAKE-NEXT: shlb %cl, %dil # sched: [3:1.50] -; SKYLAKE-NEXT: shrb %cl, %dil # sched: [3:1.50] -; SKYLAKE-NEXT: sarb %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: shlb %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: shrb %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rolb %dil # sched: [2:1.00] +; SKYLAKE-NEXT: rorb %dil # sched: [2:1.00] +; SKYLAKE-NEXT: rolb (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rorb (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rolb $7, %dil # sched: [2:1.00] +; SKYLAKE-NEXT: rorb $7, %dil # sched: [2:1.00] +; SKYLAKE-NEXT: rolb $7, (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rorb $7, (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rolb %cl, %dil # sched: [3:1.50] +; SKYLAKE-NEXT: rorb %cl, %dil # sched: [3:1.50] +; SKYLAKE-NEXT: rolb %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rorb %cl, (%rdx) # sched: [8:1.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sar_shl_shr_8: +; SKX-LABEL: test_rol_ror_8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: sarb %dil # sched: [1:0.50] -; SKX-NEXT: shlb %dil # sched: [1:0.50] -; SKX-NEXT: shrb %dil # sched: [1:0.50] -; SKX-NEXT: sarb (%rdx) # sched: [6:1.00] -; SKX-NEXT: shlb (%rdx) # sched: [6:1.00] -; SKX-NEXT: shrb (%rdx) # sched: [6:1.00] -; SKX-NEXT: sarb $7, %dil # sched: [1:0.50] -; SKX-NEXT: shlb $7, %dil # sched: [1:0.50] -; SKX-NEXT: shrb $7, %dil # sched: [1:0.50] -; SKX-NEXT: sarb $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: shlb $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: shrb $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: sarb %cl, %dil # sched: [3:1.50] -; SKX-NEXT: shlb %cl, %dil # sched: [3:1.50] -; SKX-NEXT: shrb %cl, %dil # sched: [3:1.50] -; SKX-NEXT: sarb %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: shlb %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: shrb %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rolb %dil # sched: [2:1.00] +; SKX-NEXT: rorb %dil # sched: [2:1.00] +; SKX-NEXT: rolb (%rdx) # sched: [7:1.00] +; SKX-NEXT: rorb (%rdx) # sched: [7:1.00] +; SKX-NEXT: rolb $7, %dil # sched: [2:1.00] +; SKX-NEXT: rorb $7, %dil # sched: [2:1.00] +; SKX-NEXT: rolb $7, (%rdx) # sched: [7:1.00] +; SKX-NEXT: rorb $7, (%rdx) # sched: [7:1.00] +; SKX-NEXT: rolb %cl, %dil # sched: [3:1.50] +; SKX-NEXT: rorb %cl, %dil # sched: [3:1.50] +; SKX-NEXT: rolb %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rorb %cl, (%rdx) # sched: [8:1.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sar_shl_shr_8: +; BTVER2-LABEL: test_rol_ror_8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: sarb %dil # sched: [1:0.50] -; BTVER2-NEXT: shlb %dil # sched: [1:0.50] -; BTVER2-NEXT: shrb %dil # sched: [1:0.50] -; BTVER2-NEXT: sarb (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shlb (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrb (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: sarb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: shlb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: shrb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: sarb $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shlb $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrb $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: sarb %cl, %dil # sched: [1:0.50] -; BTVER2-NEXT: shlb %cl, %dil # sched: [1:0.50] -; BTVER2-NEXT: shrb %cl, %dil # sched: [1:0.50] -; BTVER2-NEXT: sarb %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shlb %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrb %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rolb %dil # sched: [1:0.50] +; BTVER2-NEXT: rorb %dil # sched: [1:0.50] +; BTVER2-NEXT: rolb (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorb (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rolb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: rorb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: rolb $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorb $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rolb %cl, %dil # sched: [1:0.50] +; BTVER2-NEXT: rorb %cl, %dil # sched: [1:0.50] +; BTVER2-NEXT: rolb %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorb %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sar_shl_shr_8: +; ZNVER1-LABEL: test_rol_ror_8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: sarb %dil # sched: [1:0.25] -; ZNVER1-NEXT: shlb %dil # sched: [1:0.25] -; ZNVER1-NEXT: shrb %dil # sched: [1:0.25] -; ZNVER1-NEXT: sarb (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shlb (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrb (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: sarb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: shlb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: shrb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: sarb $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shlb $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrb $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: sarb %cl, %dil # sched: [1:0.25] -; ZNVER1-NEXT: shlb %cl, %dil # sched: [1:0.25] -; ZNVER1-NEXT: shrb %cl, %dil # sched: [1:0.25] -; ZNVER1-NEXT: sarb %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: shlb %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: shrb %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rolb %dil # sched: [1:0.25] +; ZNVER1-NEXT: rorb %dil # sched: [1:0.25] +; ZNVER1-NEXT: rolb (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorb (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rolb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: rorb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: rolb $7, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorb $7, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rolb %cl, %dil # sched: [1:0.25] +; ZNVER1-NEXT: rorb %cl, %dil # sched: [1:0.25] +; ZNVER1-NEXT: rolb %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorb %cl, (%rdx) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "sarb $0 \0A\09 shlb $0 \0A\09 shrb $0 \0A\09 sarb $2 \0A\09 shlb $2 \0A\09 shrb $2 \0A\09 sarb $3, $0 \0A\09 shlb $3, $0 \0A\09 shrb $3, $0 \0A\09 sarb $3, $2 \0A\09 shlb $3, $2 \0A\09 shrb $3, $2 \0A\09 sarb %CL, $0 \0A\09 shlb %CL, $0 \0A\09 shrb %CL, $0 \0A\09 sarb %CL, $2 \0A\09 shlb %CL, $2 \0A\09 shrb %CL, $2", "r,r,*m,i"(i8 %a0, i8 %a1, i8 *%a2, i8 7) + call void asm sideeffect "rolb $0 \0A\09 rorb $0 \0A\09 rolb $2 \0A\09 rorb $2 \0A\09 rolb $3, $0 \0A\09 rorb $3, $0 \0A\09 rolb $3, $2 \0A\09 rorb $3, $2 \0A\09 rolb %CL, $0 \0A\09 rorb %CL, $0 \0A\09 rolb %CL, $2 \0A\09 rorb %CL, $2", "r,r,*m,i"(i8 %a0, i8 %a1, i8 *%a2, i8 7) ret void } -define void @test_sar_shl_shr_16(i16 %a0, i16 %a1, i16 *%a2) optsize { -; GENERIC-LABEL: test_sar_shl_shr_16: +define void @test_rol_ror_16(i16 %a0, i16 %a1, i16 *%a2) optsize { +; GENERIC-LABEL: test_rol_ror_16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: sarw %di # sched: [1:0.50] -; GENERIC-NEXT: shlw %di # sched: [1:0.50] -; GENERIC-NEXT: shrw %di # sched: [1:0.50] -; GENERIC-NEXT: sarw (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: shlw (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shrw (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: sarw $7, %di # sched: [1:0.50] -; GENERIC-NEXT: shlw $7, %di # sched: [1:0.50] -; GENERIC-NEXT: shrw $7, %di # sched: [1:0.50] -; GENERIC-NEXT: sarw $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shlw $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shrw $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: sarw %cl, %di # sched: [3:1.50] -; GENERIC-NEXT: shlw %cl, %di # sched: [3:1.50] -; GENERIC-NEXT: shrw %cl, %di # sched: [3:1.50] -; GENERIC-NEXT: sarw %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: shlw %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: shrw %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rolw %di # sched: [1:0.50] +; GENERIC-NEXT: rorw %di # sched: [1:0.50] +; GENERIC-NEXT: rolw (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rorw (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rolw $7, %di # sched: [2:1.00] +; GENERIC-NEXT: rorw $7, %di # sched: [2:1.00] +; GENERIC-NEXT: rolw $7, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: rorw $7, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: rolw %cl, %di # sched: [3:1.50] +; GENERIC-NEXT: rorw %cl, %di # sched: [3:1.50] +; GENERIC-NEXT: rolw %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rorw %cl, (%rdx) # sched: [9:1.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sar_shl_shr_16: +; ATOM-LABEL: test_rol_ror_16: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: sarw %di # sched: [1:1.00] -; ATOM-NEXT: shlw %di # sched: [1:1.00] -; ATOM-NEXT: shrw %di # sched: [1:1.00] -; ATOM-NEXT: sarw (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shlw (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrw (%rdx) # sched: [1:1.00] -; ATOM-NEXT: sarw $7, %di # sched: [1:1.00] -; ATOM-NEXT: shlw $7, %di # sched: [1:1.00] -; ATOM-NEXT: shrw $7, %di # sched: [1:1.00] -; ATOM-NEXT: sarw $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shlw $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrw $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: sarw %cl, %di # sched: [1:1.00] -; ATOM-NEXT: shlw %cl, %di # sched: [1:1.00] -; ATOM-NEXT: shrw %cl, %di # sched: [1:1.00] -; ATOM-NEXT: sarw %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shlw %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrw %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rolw %di # sched: [1:1.00] +; ATOM-NEXT: rorw %di # sched: [1:1.00] +; ATOM-NEXT: rolw (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorw (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rolw $7, %di # sched: [1:1.00] +; ATOM-NEXT: rorw $7, %di # sched: [1:1.00] +; ATOM-NEXT: rolw $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorw $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rolw %cl, %di # sched: [1:1.00] +; ATOM-NEXT: rorw %cl, %di # sched: [1:1.00] +; ATOM-NEXT: rolw %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorw %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sar_shl_shr_16: +; SLM-LABEL: test_rol_ror_16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: sarw %di # sched: [1:1.00] -; SLM-NEXT: shlw %di # sched: [1:1.00] -; SLM-NEXT: shrw %di # sched: [1:1.00] -; SLM-NEXT: sarw (%rdx) # sched: [4:2.00] -; SLM-NEXT: shlw (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrw (%rdx) # sched: [4:2.00] -; SLM-NEXT: sarw $7, %di # sched: [1:1.00] -; SLM-NEXT: shlw $7, %di # sched: [1:1.00] -; SLM-NEXT: shrw $7, %di # sched: [1:1.00] -; SLM-NEXT: sarw $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shlw $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrw $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: sarw %cl, %di # sched: [1:1.00] -; SLM-NEXT: shlw %cl, %di # sched: [1:1.00] -; SLM-NEXT: shrw %cl, %di # sched: [1:1.00] -; SLM-NEXT: sarw %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shlw %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrw %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rolw %di # sched: [1:1.00] +; SLM-NEXT: rorw %di # sched: [1:1.00] +; SLM-NEXT: rolw (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorw (%rdx) # sched: [4:2.00] +; SLM-NEXT: rolw $7, %di # sched: [1:1.00] +; SLM-NEXT: rorw $7, %di # sched: [1:1.00] +; SLM-NEXT: rolw $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorw $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rolw %cl, %di # sched: [1:1.00] +; SLM-NEXT: rorw %cl, %di # sched: [1:1.00] +; SLM-NEXT: rolw %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorw %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sar_shl_shr_16: +; SANDY-LABEL: test_rol_ror_16: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: sarw %di # sched: [1:0.50] -; SANDY-NEXT: shlw %di # sched: [1:0.50] -; SANDY-NEXT: shrw %di # sched: [1:0.50] -; SANDY-NEXT: sarw (%rdx) # sched: [5:1.00] -; SANDY-NEXT: shlw (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shrw (%rdx) # sched: [5:1.00] -; SANDY-NEXT: sarw $7, %di # sched: [1:0.50] -; SANDY-NEXT: shlw $7, %di # sched: [1:0.50] -; SANDY-NEXT: shrw $7, %di # sched: [1:0.50] -; SANDY-NEXT: sarw $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shlw $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shrw $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: sarw %cl, %di # sched: [3:1.50] -; SANDY-NEXT: shlw %cl, %di # sched: [3:1.50] -; SANDY-NEXT: shrw %cl, %di # sched: [3:1.50] -; SANDY-NEXT: sarw %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: shlw %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: shrw %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rolw %di # sched: [1:0.50] +; SANDY-NEXT: rorw %di # sched: [1:0.50] +; SANDY-NEXT: rolw (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rorw (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rolw $7, %di # sched: [2:1.00] +; SANDY-NEXT: rorw $7, %di # sched: [2:1.00] +; SANDY-NEXT: rolw $7, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: rorw $7, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: rolw %cl, %di # sched: [3:1.50] +; SANDY-NEXT: rorw %cl, %di # sched: [3:1.50] +; SANDY-NEXT: rolw %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rorw %cl, (%rdx) # sched: [9:1.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sar_shl_shr_16: +; HASWELL-LABEL: test_rol_ror_16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: sarw %di # sched: [1:0.50] -; HASWELL-NEXT: shlw %di # sched: [1:0.50] -; HASWELL-NEXT: shrw %di # sched: [1:0.50] -; HASWELL-NEXT: sarw (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shlw (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shrw (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: sarw $7, %di # sched: [1:0.50] -; HASWELL-NEXT: shlw $7, %di # sched: [1:0.50] -; HASWELL-NEXT: shrw $7, %di # sched: [1:0.50] -; HASWELL-NEXT: sarw $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shlw $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shrw $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: sarw %cl, %di # sched: [3:1.00] -; HASWELL-NEXT: shlw %cl, %di # sched: [3:1.00] -; HASWELL-NEXT: shrw %cl, %di # sched: [3:1.00] -; HASWELL-NEXT: sarw %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: shlw %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: shrw %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rolw %di # sched: [2:1.00] +; HASWELL-NEXT: rorw %di # sched: [2:1.00] +; HASWELL-NEXT: rolw (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rorw (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rolw $7, %di # sched: [2:1.00] +; HASWELL-NEXT: rorw $7, %di # sched: [2:1.00] +; HASWELL-NEXT: rolw $7, (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rorw $7, (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rolw %cl, %di # sched: [3:1.00] +; HASWELL-NEXT: rorw %cl, %di # sched: [3:1.00] +; HASWELL-NEXT: rolw %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rorw %cl, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sar_shl_shr_16: +; BROADWELL-LABEL: test_rol_ror_16: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: sarw %di # sched: [1:0.50] -; BROADWELL-NEXT: shlw %di # sched: [1:0.50] -; BROADWELL-NEXT: shrw %di # sched: [1:0.50] -; BROADWELL-NEXT: sarw (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shlw (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shrw (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: sarw $7, %di # sched: [1:0.50] -; BROADWELL-NEXT: shlw $7, %di # sched: [1:0.50] -; BROADWELL-NEXT: shrw $7, %di # sched: [1:0.50] -; BROADWELL-NEXT: sarw $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shlw $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shrw $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: sarw %cl, %di # sched: [3:1.00] -; BROADWELL-NEXT: shlw %cl, %di # sched: [3:1.00] -; BROADWELL-NEXT: shrw %cl, %di # sched: [3:1.00] -; BROADWELL-NEXT: sarw %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: shlw %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: shrw %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rolw %di # sched: [2:1.00] +; BROADWELL-NEXT: rorw %di # sched: [2:1.00] +; BROADWELL-NEXT: rolw (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rorw (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rolw $7, %di # sched: [2:1.00] +; BROADWELL-NEXT: rorw $7, %di # sched: [2:1.00] +; BROADWELL-NEXT: rolw $7, (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rorw $7, (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rolw %cl, %di # sched: [3:1.00] +; BROADWELL-NEXT: rorw %cl, %di # sched: [3:1.00] +; BROADWELL-NEXT: rolw %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rorw %cl, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sar_shl_shr_16: +; SKYLAKE-LABEL: test_rol_ror_16: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: sarw %di # sched: [1:0.50] -; SKYLAKE-NEXT: shlw %di # sched: [1:0.50] -; SKYLAKE-NEXT: shrw %di # sched: [1:0.50] -; SKYLAKE-NEXT: sarw (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shlw (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shrw (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: sarw $7, %di # sched: [1:0.50] -; SKYLAKE-NEXT: shlw $7, %di # sched: [1:0.50] -; SKYLAKE-NEXT: shrw $7, %di # sched: [1:0.50] -; SKYLAKE-NEXT: sarw $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shlw $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shrw $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: sarw %cl, %di # sched: [3:1.50] -; SKYLAKE-NEXT: shlw %cl, %di # sched: [3:1.50] -; SKYLAKE-NEXT: shrw %cl, %di # sched: [3:1.50] -; SKYLAKE-NEXT: sarw %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: shlw %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: shrw %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rolw %di # sched: [2:1.00] +; SKYLAKE-NEXT: rorw %di # sched: [2:1.00] +; SKYLAKE-NEXT: rolw (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rorw (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rolw $7, %di # sched: [2:1.00] +; SKYLAKE-NEXT: rorw $7, %di # sched: [2:1.00] +; SKYLAKE-NEXT: rolw $7, (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rorw $7, (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rolw %cl, %di # sched: [3:1.50] +; SKYLAKE-NEXT: rorw %cl, %di # sched: [3:1.50] +; SKYLAKE-NEXT: rolw %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rorw %cl, (%rdx) # sched: [8:1.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sar_shl_shr_16: +; SKX-LABEL: test_rol_ror_16: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: sarw %di # sched: [1:0.50] -; SKX-NEXT: shlw %di # sched: [1:0.50] -; SKX-NEXT: shrw %di # sched: [1:0.50] -; SKX-NEXT: sarw (%rdx) # sched: [6:1.00] -; SKX-NEXT: shlw (%rdx) # sched: [6:1.00] -; SKX-NEXT: shrw (%rdx) # sched: [6:1.00] -; SKX-NEXT: sarw $7, %di # sched: [1:0.50] -; SKX-NEXT: shlw $7, %di # sched: [1:0.50] -; SKX-NEXT: shrw $7, %di # sched: [1:0.50] -; SKX-NEXT: sarw $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: shlw $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: shrw $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: sarw %cl, %di # sched: [3:1.50] -; SKX-NEXT: shlw %cl, %di # sched: [3:1.50] -; SKX-NEXT: shrw %cl, %di # sched: [3:1.50] -; SKX-NEXT: sarw %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: shlw %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: shrw %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rolw %di # sched: [2:1.00] +; SKX-NEXT: rorw %di # sched: [2:1.00] +; SKX-NEXT: rolw (%rdx) # sched: [7:1.00] +; SKX-NEXT: rorw (%rdx) # sched: [7:1.00] +; SKX-NEXT: rolw $7, %di # sched: [2:1.00] +; SKX-NEXT: rorw $7, %di # sched: [2:1.00] +; SKX-NEXT: rolw $7, (%rdx) # sched: [7:1.00] +; SKX-NEXT: rorw $7, (%rdx) # sched: [7:1.00] +; SKX-NEXT: rolw %cl, %di # sched: [3:1.50] +; SKX-NEXT: rorw %cl, %di # sched: [3:1.50] +; SKX-NEXT: rolw %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rorw %cl, (%rdx) # sched: [8:1.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sar_shl_shr_16: +; BTVER2-LABEL: test_rol_ror_16: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: sarw %di # sched: [1:0.50] -; BTVER2-NEXT: shlw %di # sched: [1:0.50] -; BTVER2-NEXT: shrw %di # sched: [1:0.50] -; BTVER2-NEXT: sarw (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shlw (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrw (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: sarw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: shlw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: shrw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: sarw $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shlw $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrw $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: sarw %cl, %di # sched: [1:0.50] -; BTVER2-NEXT: shlw %cl, %di # sched: [1:0.50] -; BTVER2-NEXT: shrw %cl, %di # sched: [1:0.50] -; BTVER2-NEXT: sarw %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shlw %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrw %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rolw %di # sched: [1:0.50] +; BTVER2-NEXT: rorw %di # sched: [1:0.50] +; BTVER2-NEXT: rolw (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorw (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rolw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: rorw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: rolw $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorw $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rolw %cl, %di # sched: [1:0.50] +; BTVER2-NEXT: rorw %cl, %di # sched: [1:0.50] +; BTVER2-NEXT: rolw %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorw %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sar_shl_shr_16: +; ZNVER1-LABEL: test_rol_ror_16: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: sarw %di # sched: [1:0.25] -; ZNVER1-NEXT: shlw %di # sched: [1:0.25] -; ZNVER1-NEXT: shrw %di # sched: [1:0.25] -; ZNVER1-NEXT: sarw (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shlw (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrw (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: sarw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: shlw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: shrw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: sarw $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shlw $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrw $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: sarw %cl, %di # sched: [1:0.25] -; ZNVER1-NEXT: shlw %cl, %di # sched: [1:0.25] -; ZNVER1-NEXT: shrw %cl, %di # sched: [1:0.25] -; ZNVER1-NEXT: sarw %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: shlw %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: shrw %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rolw %di # sched: [1:0.25] +; ZNVER1-NEXT: rorw %di # sched: [1:0.25] +; ZNVER1-NEXT: rolw (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorw (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rolw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: rorw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: rolw $7, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorw $7, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rolw %cl, %di # sched: [1:0.25] +; ZNVER1-NEXT: rorw %cl, %di # sched: [1:0.25] +; ZNVER1-NEXT: rolw %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorw %cl, (%rdx) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "sarw $0 \0A\09 shlw $0 \0A\09 shrw $0 \0A\09 sarw $2 \0A\09 shlw $2 \0A\09 shrw $2 \0A\09 sarw $3, $0 \0A\09 shlw $3, $0 \0A\09 shrw $3, $0 \0A\09 sarw $3, $2 \0A\09 shlw $3, $2 \0A\09 shrw $3, $2 \0A\09 sarw %CL, $0 \0A\09 shlw %CL, $0 \0A\09 shrw %CL, $0 \0A\09 sarw %CL, $2 \0A\09 shlw %CL, $2 \0A\09 shrw %CL, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7) + call void asm sideeffect "rolw $0 \0A\09 rorw $0 \0A\09 rolw $2 \0A\09 rorw $2 \0A\09 rolw $3, $0 \0A\09 rorw $3, $0 \0A\09 rolw $3, $2 \0A\09 rorw $3, $2 \0A\09 rolw %CL, $0 \0A\09 rorw %CL, $0 \0A\09 rolw %CL, $2 \0A\09 rorw %CL, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7) ret void } -define void @test_sar_shl_shr_32(i32 %a0, i32 %a1, i32 *%a2) optsize { -; GENERIC-LABEL: test_sar_shl_shr_32: +define void @test_rol_ror_32(i32 %a0, i32 %a1, i32 *%a2) optsize { +; GENERIC-LABEL: test_rol_ror_32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: sarl %edi # sched: [1:0.50] -; GENERIC-NEXT: shll %edi # sched: [1:0.50] -; GENERIC-NEXT: shrl %edi # sched: [1:0.50] -; GENERIC-NEXT: sarl (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: shll (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shrl (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: sarl $7, %edi # sched: [1:0.50] -; GENERIC-NEXT: shll $7, %edi # sched: [1:0.50] -; GENERIC-NEXT: shrl $7, %edi # sched: [1:0.50] -; GENERIC-NEXT: sarl $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shll $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shrl $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: sarl %cl, %edi # sched: [3:1.50] -; GENERIC-NEXT: shll %cl, %edi # sched: [3:1.50] -; GENERIC-NEXT: shrl %cl, %edi # sched: [3:1.50] -; GENERIC-NEXT: sarl %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: shll %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: shrl %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: roll %edi # sched: [1:0.50] +; GENERIC-NEXT: rorl %edi # sched: [1:0.50] +; GENERIC-NEXT: roll (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rorl (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: roll $7, %edi # sched: [2:1.00] +; GENERIC-NEXT: rorl $7, %edi # sched: [2:1.00] +; GENERIC-NEXT: roll $7, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: rorl $7, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: roll %cl, %edi # sched: [3:1.50] +; GENERIC-NEXT: rorl %cl, %edi # sched: [3:1.50] +; GENERIC-NEXT: roll %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rorl %cl, (%rdx) # sched: [9:1.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sar_shl_shr_32: +; ATOM-LABEL: test_rol_ror_32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: sarl %edi # sched: [1:1.00] -; ATOM-NEXT: shll %edi # sched: [1:1.00] -; ATOM-NEXT: shrl %edi # sched: [1:1.00] -; ATOM-NEXT: sarl (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shll (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrl (%rdx) # sched: [1:1.00] -; ATOM-NEXT: sarl $7, %edi # sched: [1:1.00] -; ATOM-NEXT: shll $7, %edi # sched: [1:1.00] -; ATOM-NEXT: shrl $7, %edi # sched: [1:1.00] -; ATOM-NEXT: sarl $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shll $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrl $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: sarl %cl, %edi # sched: [1:1.00] -; ATOM-NEXT: shll %cl, %edi # sched: [1:1.00] -; ATOM-NEXT: shrl %cl, %edi # sched: [1:1.00] -; ATOM-NEXT: sarl %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shll %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrl %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: roll %edi # sched: [1:1.00] +; ATOM-NEXT: rorl %edi # sched: [1:1.00] +; ATOM-NEXT: roll (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorl (%rdx) # sched: [1:1.00] +; ATOM-NEXT: roll $7, %edi # sched: [1:1.00] +; ATOM-NEXT: rorl $7, %edi # sched: [1:1.00] +; ATOM-NEXT: roll $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorl $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: roll %cl, %edi # sched: [1:1.00] +; ATOM-NEXT: rorl %cl, %edi # sched: [1:1.00] +; ATOM-NEXT: roll %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorl %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sar_shl_shr_32: +; SLM-LABEL: test_rol_ror_32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: sarl %edi # sched: [1:1.00] -; SLM-NEXT: shll %edi # sched: [1:1.00] -; SLM-NEXT: shrl %edi # sched: [1:1.00] -; SLM-NEXT: sarl (%rdx) # sched: [4:2.00] -; SLM-NEXT: shll (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrl (%rdx) # sched: [4:2.00] -; SLM-NEXT: sarl $7, %edi # sched: [1:1.00] -; SLM-NEXT: shll $7, %edi # sched: [1:1.00] -; SLM-NEXT: shrl $7, %edi # sched: [1:1.00] -; SLM-NEXT: sarl $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shll $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrl $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: sarl %cl, %edi # sched: [1:1.00] -; SLM-NEXT: shll %cl, %edi # sched: [1:1.00] -; SLM-NEXT: shrl %cl, %edi # sched: [1:1.00] -; SLM-NEXT: sarl %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shll %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrl %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: roll %edi # sched: [1:1.00] +; SLM-NEXT: rorl %edi # sched: [1:1.00] +; SLM-NEXT: roll (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorl (%rdx) # sched: [4:2.00] +; SLM-NEXT: roll $7, %edi # sched: [1:1.00] +; SLM-NEXT: rorl $7, %edi # sched: [1:1.00] +; SLM-NEXT: roll $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorl $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: roll %cl, %edi # sched: [1:1.00] +; SLM-NEXT: rorl %cl, %edi # sched: [1:1.00] +; SLM-NEXT: roll %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorl %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sar_shl_shr_32: +; SANDY-LABEL: test_rol_ror_32: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: sarl %edi # sched: [1:0.50] -; SANDY-NEXT: shll %edi # sched: [1:0.50] -; SANDY-NEXT: shrl %edi # sched: [1:0.50] -; SANDY-NEXT: sarl (%rdx) # sched: [5:1.00] -; SANDY-NEXT: shll (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shrl (%rdx) # sched: [5:1.00] -; SANDY-NEXT: sarl $7, %edi # sched: [1:0.50] -; SANDY-NEXT: shll $7, %edi # sched: [1:0.50] -; SANDY-NEXT: shrl $7, %edi # sched: [1:0.50] -; SANDY-NEXT: sarl $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shll $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shrl $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: sarl %cl, %edi # sched: [3:1.50] -; SANDY-NEXT: shll %cl, %edi # sched: [3:1.50] -; SANDY-NEXT: shrl %cl, %edi # sched: [3:1.50] -; SANDY-NEXT: sarl %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: shll %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: shrl %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: roll %edi # sched: [1:0.50] +; SANDY-NEXT: rorl %edi # sched: [1:0.50] +; SANDY-NEXT: roll (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rorl (%rdx) # sched: [5:1.00] +; SANDY-NEXT: roll $7, %edi # sched: [2:1.00] +; SANDY-NEXT: rorl $7, %edi # sched: [2:1.00] +; SANDY-NEXT: roll $7, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: rorl $7, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: roll %cl, %edi # sched: [3:1.50] +; SANDY-NEXT: rorl %cl, %edi # sched: [3:1.50] +; SANDY-NEXT: roll %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rorl %cl, (%rdx) # sched: [9:1.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sar_shl_shr_32: +; HASWELL-LABEL: test_rol_ror_32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: sarl %edi # sched: [1:0.50] -; HASWELL-NEXT: shll %edi # sched: [1:0.50] -; HASWELL-NEXT: shrl %edi # sched: [1:0.50] -; HASWELL-NEXT: sarl (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shll (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shrl (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: sarl $7, %edi # sched: [1:0.50] -; HASWELL-NEXT: shll $7, %edi # sched: [1:0.50] -; HASWELL-NEXT: shrl $7, %edi # sched: [1:0.50] -; HASWELL-NEXT: sarl $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shll $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shrl $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: sarl %cl, %edi # sched: [3:1.00] -; HASWELL-NEXT: shll %cl, %edi # sched: [3:1.00] -; HASWELL-NEXT: shrl %cl, %edi # sched: [3:1.00] -; HASWELL-NEXT: sarl %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: shll %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: shrl %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: roll %edi # sched: [2:1.00] +; HASWELL-NEXT: rorl %edi # sched: [2:1.00] +; HASWELL-NEXT: roll (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rorl (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: roll $7, %edi # sched: [2:1.00] +; HASWELL-NEXT: rorl $7, %edi # sched: [2:1.00] +; HASWELL-NEXT: roll $7, (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rorl $7, (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: roll %cl, %edi # sched: [3:1.00] +; HASWELL-NEXT: rorl %cl, %edi # sched: [3:1.00] +; HASWELL-NEXT: roll %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rorl %cl, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sar_shl_shr_32: +; BROADWELL-LABEL: test_rol_ror_32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: sarl %edi # sched: [1:0.50] -; BROADWELL-NEXT: shll %edi # sched: [1:0.50] -; BROADWELL-NEXT: shrl %edi # sched: [1:0.50] -; BROADWELL-NEXT: sarl (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shll (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shrl (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: sarl $7, %edi # sched: [1:0.50] -; BROADWELL-NEXT: shll $7, %edi # sched: [1:0.50] -; BROADWELL-NEXT: shrl $7, %edi # sched: [1:0.50] -; BROADWELL-NEXT: sarl $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shll $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shrl $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: sarl %cl, %edi # sched: [3:1.00] -; BROADWELL-NEXT: shll %cl, %edi # sched: [3:1.00] -; BROADWELL-NEXT: shrl %cl, %edi # sched: [3:1.00] -; BROADWELL-NEXT: sarl %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: shll %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: shrl %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: roll %edi # sched: [2:1.00] +; BROADWELL-NEXT: rorl %edi # sched: [2:1.00] +; BROADWELL-NEXT: roll (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rorl (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: roll $7, %edi # sched: [2:1.00] +; BROADWELL-NEXT: rorl $7, %edi # sched: [2:1.00] +; BROADWELL-NEXT: roll $7, (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rorl $7, (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: roll %cl, %edi # sched: [3:1.00] +; BROADWELL-NEXT: rorl %cl, %edi # sched: [3:1.00] +; BROADWELL-NEXT: roll %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rorl %cl, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sar_shl_shr_32: +; SKYLAKE-LABEL: test_rol_ror_32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: sarl %edi # sched: [1:0.50] -; SKYLAKE-NEXT: shll %edi # sched: [1:0.50] -; SKYLAKE-NEXT: shrl %edi # sched: [1:0.50] -; SKYLAKE-NEXT: sarl (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shll (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shrl (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: sarl $7, %edi # sched: [1:0.50] -; SKYLAKE-NEXT: shll $7, %edi # sched: [1:0.50] -; SKYLAKE-NEXT: shrl $7, %edi # sched: [1:0.50] -; SKYLAKE-NEXT: sarl $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shll $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shrl $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: sarl %cl, %edi # sched: [3:1.50] -; SKYLAKE-NEXT: shll %cl, %edi # sched: [3:1.50] -; SKYLAKE-NEXT: shrl %cl, %edi # sched: [3:1.50] -; SKYLAKE-NEXT: sarl %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: shll %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: shrl %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: roll %edi # sched: [2:1.00] +; SKYLAKE-NEXT: rorl %edi # sched: [2:1.00] +; SKYLAKE-NEXT: roll (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rorl (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: roll $7, %edi # sched: [2:1.00] +; SKYLAKE-NEXT: rorl $7, %edi # sched: [2:1.00] +; SKYLAKE-NEXT: roll $7, (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rorl $7, (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: roll %cl, %edi # sched: [3:1.50] +; SKYLAKE-NEXT: rorl %cl, %edi # sched: [3:1.50] +; SKYLAKE-NEXT: roll %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rorl %cl, (%rdx) # sched: [8:1.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sar_shl_shr_32: +; SKX-LABEL: test_rol_ror_32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: sarl %edi # sched: [1:0.50] -; SKX-NEXT: shll %edi # sched: [1:0.50] -; SKX-NEXT: shrl %edi # sched: [1:0.50] -; SKX-NEXT: sarl (%rdx) # sched: [6:1.00] -; SKX-NEXT: shll (%rdx) # sched: [6:1.00] -; SKX-NEXT: shrl (%rdx) # sched: [6:1.00] -; SKX-NEXT: sarl $7, %edi # sched: [1:0.50] -; SKX-NEXT: shll $7, %edi # sched: [1:0.50] -; SKX-NEXT: shrl $7, %edi # sched: [1:0.50] -; SKX-NEXT: sarl $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: shll $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: shrl $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: sarl %cl, %edi # sched: [3:1.50] -; SKX-NEXT: shll %cl, %edi # sched: [3:1.50] -; SKX-NEXT: shrl %cl, %edi # sched: [3:1.50] -; SKX-NEXT: sarl %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: shll %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: shrl %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: roll %edi # sched: [2:1.00] +; SKX-NEXT: rorl %edi # sched: [2:1.00] +; SKX-NEXT: roll (%rdx) # sched: [7:1.00] +; SKX-NEXT: rorl (%rdx) # sched: [7:1.00] +; SKX-NEXT: roll $7, %edi # sched: [2:1.00] +; SKX-NEXT: rorl $7, %edi # sched: [2:1.00] +; SKX-NEXT: roll $7, (%rdx) # sched: [7:1.00] +; SKX-NEXT: rorl $7, (%rdx) # sched: [7:1.00] +; SKX-NEXT: roll %cl, %edi # sched: [3:1.50] +; SKX-NEXT: rorl %cl, %edi # sched: [3:1.50] +; SKX-NEXT: roll %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rorl %cl, (%rdx) # sched: [8:1.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sar_shl_shr_32: +; BTVER2-LABEL: test_rol_ror_32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: sarl %edi # sched: [1:0.50] -; BTVER2-NEXT: shll %edi # sched: [1:0.50] -; BTVER2-NEXT: shrl %edi # sched: [1:0.50] -; BTVER2-NEXT: sarl (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shll (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrl (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: sarl $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: shll $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: shrl $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: sarl $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shll $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrl $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: sarl %cl, %edi # sched: [1:0.50] -; BTVER2-NEXT: shll %cl, %edi # sched: [1:0.50] -; BTVER2-NEXT: shrl %cl, %edi # sched: [1:0.50] -; BTVER2-NEXT: sarl %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shll %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrl %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: roll %edi # sched: [1:0.50] +; BTVER2-NEXT: rorl %edi # sched: [1:0.50] +; BTVER2-NEXT: roll (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorl (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: roll $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: rorl $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: roll $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorl $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: roll %cl, %edi # sched: [1:0.50] +; BTVER2-NEXT: rorl %cl, %edi # sched: [1:0.50] +; BTVER2-NEXT: roll %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorl %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sar_shl_shr_32: +; ZNVER1-LABEL: test_rol_ror_32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: sarl %edi # sched: [1:0.25] -; ZNVER1-NEXT: shll %edi # sched: [1:0.25] -; ZNVER1-NEXT: shrl %edi # sched: [1:0.25] -; ZNVER1-NEXT: sarl (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shll (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrl (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: sarl $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: shll $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: shrl $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: sarl $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shll $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrl $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: sarl %cl, %edi # sched: [1:0.25] -; ZNVER1-NEXT: shll %cl, %edi # sched: [1:0.25] -; ZNVER1-NEXT: shrl %cl, %edi # sched: [1:0.25] -; ZNVER1-NEXT: sarl %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: shll %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: shrl %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: roll %edi # sched: [1:0.25] +; ZNVER1-NEXT: rorl %edi # sched: [1:0.25] +; ZNVER1-NEXT: roll (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorl (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: roll $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: rorl $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: roll $7, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorl $7, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: roll %cl, %edi # sched: [1:0.25] +; ZNVER1-NEXT: rorl %cl, %edi # sched: [1:0.25] +; ZNVER1-NEXT: roll %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorl %cl, (%rdx) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "sarl $0 \0A\09 shll $0 \0A\09 shrl $0 \0A\09 sarl $2 \0A\09 shll $2 \0A\09 shrl $2 \0A\09 sarl $3, $0 \0A\09 shll $3, $0 \0A\09 shrl $3, $0 \0A\09 sarl $3, $2 \0A\09 shll $3, $2 \0A\09 shrl $3, $2 \0A\09 sarl %CL, $0 \0A\09 shll %CL, $0 \0A\09 shrl %CL, $0 \0A\09 sarl %CL, $2 \0A\09 shll %CL, $2 \0A\09 shrl %CL, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7) + call void asm sideeffect "roll $0 \0A\09 rorl $0 \0A\09 roll $2 \0A\09 rorl $2 \0A\09 roll $3, $0 \0A\09 rorl $3, $0 \0A\09 roll $3, $2 \0A\09 rorl $3, $2 \0A\09 roll %CL, $0 \0A\09 rorl %CL, $0 \0A\09 roll %CL, $2 \0A\09 rorl %CL, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7) ret void } -define void @test_sar_shl_shr_64(i64 %a0, i64 %a1, i64 *%a2) optsize { -; GENERIC-LABEL: test_sar_shl_shr_64: +define void @test_rol_ror_64(i64 %a0, i64 %a1, i64 *%a2) optsize { +; GENERIC-LABEL: test_rol_ror_64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: sarq %rdi # sched: [1:0.50] -; GENERIC-NEXT: shlq %rdi # sched: [1:0.50] -; GENERIC-NEXT: shrq %rdi # sched: [1:0.50] -; GENERIC-NEXT: sarq (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: shlq (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shrq (%rdx) # sched: [5:1.00] -; GENERIC-NEXT: sarq $7, %rdi # sched: [1:0.50] -; GENERIC-NEXT: shlq $7, %rdi # sched: [1:0.50] -; GENERIC-NEXT: shrq $7, %rdi # sched: [1:0.50] -; GENERIC-NEXT: sarq $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shlq $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: shrq $7, (%rdx) # sched: [7:1.00] -; GENERIC-NEXT: sarq %cl, %rdi # sched: [3:1.50] -; GENERIC-NEXT: shlq %cl, %rdi # sched: [3:1.50] -; GENERIC-NEXT: shrq %cl, %rdi # sched: [3:1.50] -; GENERIC-NEXT: sarq %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: shlq %cl, (%rdx) # sched: [9:1.50] -; GENERIC-NEXT: shrq %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rolq %rdi # sched: [1:0.50] +; GENERIC-NEXT: rorq %rdi # sched: [1:0.50] +; GENERIC-NEXT: rolq (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rorq (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: rolq $7, %rdi # sched: [2:1.00] +; GENERIC-NEXT: rorq $7, %rdi # sched: [2:1.00] +; GENERIC-NEXT: rolq $7, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: rorq $7, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: rolq %cl, %rdi # sched: [3:1.50] +; GENERIC-NEXT: rorq %cl, %rdi # sched: [3:1.50] +; GENERIC-NEXT: rolq %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: rorq %cl, (%rdx) # sched: [9:1.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sar_shl_shr_64: +; ATOM-LABEL: test_rol_ror_64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: sarq %rdi # sched: [1:1.00] -; ATOM-NEXT: shlq %rdi # sched: [1:1.00] -; ATOM-NEXT: shrq %rdi # sched: [1:1.00] -; ATOM-NEXT: sarq (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shlq (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrq (%rdx) # sched: [1:1.00] -; ATOM-NEXT: sarq $7, %rdi # sched: [1:1.00] -; ATOM-NEXT: shlq $7, %rdi # sched: [1:1.00] -; ATOM-NEXT: shrq $7, %rdi # sched: [1:1.00] -; ATOM-NEXT: sarq $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shlq $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrq $7, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: sarq %cl, %rdi # sched: [1:1.00] -; ATOM-NEXT: shlq %cl, %rdi # sched: [1:1.00] -; ATOM-NEXT: shrq %cl, %rdi # sched: [1:1.00] -; ATOM-NEXT: sarq %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shlq %cl, (%rdx) # sched: [1:1.00] -; ATOM-NEXT: shrq %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rolq %rdi # sched: [1:1.00] +; ATOM-NEXT: rorq %rdi # sched: [1:1.00] +; ATOM-NEXT: rolq (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorq (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rolq $7, %rdi # sched: [1:1.00] +; ATOM-NEXT: rorq $7, %rdi # sched: [1:1.00] +; ATOM-NEXT: rolq $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorq $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rolq %cl, %rdi # sched: [1:1.00] +; ATOM-NEXT: rorq %cl, %rdi # sched: [1:1.00] +; ATOM-NEXT: rolq %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: rorq %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sar_shl_shr_64: +; SLM-LABEL: test_rol_ror_64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: sarq %rdi # sched: [1:1.00] -; SLM-NEXT: shlq %rdi # sched: [1:1.00] -; SLM-NEXT: shrq %rdi # sched: [1:1.00] -; SLM-NEXT: sarq (%rdx) # sched: [4:2.00] -; SLM-NEXT: shlq (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrq (%rdx) # sched: [4:2.00] -; SLM-NEXT: sarq $7, %rdi # sched: [1:1.00] -; SLM-NEXT: shlq $7, %rdi # sched: [1:1.00] -; SLM-NEXT: shrq $7, %rdi # sched: [1:1.00] -; SLM-NEXT: sarq $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shlq $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrq $7, (%rdx) # sched: [4:2.00] -; SLM-NEXT: sarq %cl, %rdi # sched: [1:1.00] -; SLM-NEXT: shlq %cl, %rdi # sched: [1:1.00] -; SLM-NEXT: shrq %cl, %rdi # sched: [1:1.00] -; SLM-NEXT: sarq %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shlq %cl, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrq %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rolq %rdi # sched: [1:1.00] +; SLM-NEXT: rorq %rdi # sched: [1:1.00] +; SLM-NEXT: rolq (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorq (%rdx) # sched: [4:2.00] +; SLM-NEXT: rolq $7, %rdi # sched: [1:1.00] +; SLM-NEXT: rorq $7, %rdi # sched: [1:1.00] +; SLM-NEXT: rolq $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorq $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rolq %cl, %rdi # sched: [1:1.00] +; SLM-NEXT: rorq %cl, %rdi # sched: [1:1.00] +; SLM-NEXT: rolq %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: rorq %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sar_shl_shr_64: +; SANDY-LABEL: test_rol_ror_64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: sarq %rdi # sched: [1:0.50] -; SANDY-NEXT: shlq %rdi # sched: [1:0.50] -; SANDY-NEXT: shrq %rdi # sched: [1:0.50] -; SANDY-NEXT: sarq (%rdx) # sched: [5:1.00] -; SANDY-NEXT: shlq (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shrq (%rdx) # sched: [5:1.00] -; SANDY-NEXT: sarq $7, %rdi # sched: [1:0.50] -; SANDY-NEXT: shlq $7, %rdi # sched: [1:0.50] -; SANDY-NEXT: shrq $7, %rdi # sched: [1:0.50] -; SANDY-NEXT: sarq $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shlq $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: shrq $7, (%rdx) # sched: [7:1.00] -; SANDY-NEXT: sarq %cl, %rdi # sched: [3:1.50] -; SANDY-NEXT: shlq %cl, %rdi # sched: [3:1.50] -; SANDY-NEXT: shrq %cl, %rdi # sched: [3:1.50] -; SANDY-NEXT: sarq %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: shlq %cl, (%rdx) # sched: [9:1.50] -; SANDY-NEXT: shrq %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rolq %rdi # sched: [1:0.50] +; SANDY-NEXT: rorq %rdi # sched: [1:0.50] +; SANDY-NEXT: rolq (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rorq (%rdx) # sched: [5:1.00] +; SANDY-NEXT: rolq $7, %rdi # sched: [2:1.00] +; SANDY-NEXT: rorq $7, %rdi # sched: [2:1.00] +; SANDY-NEXT: rolq $7, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: rorq $7, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: rolq %cl, %rdi # sched: [3:1.50] +; SANDY-NEXT: rorq %cl, %rdi # sched: [3:1.50] +; SANDY-NEXT: rolq %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: rorq %cl, (%rdx) # sched: [9:1.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sar_shl_shr_64: +; HASWELL-LABEL: test_rol_ror_64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: sarq %rdi # sched: [1:0.50] -; HASWELL-NEXT: shlq %rdi # sched: [1:0.50] -; HASWELL-NEXT: shrq %rdi # sched: [1:0.50] -; HASWELL-NEXT: sarq (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shlq (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shrq (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: sarq $7, %rdi # sched: [1:0.50] -; HASWELL-NEXT: shlq $7, %rdi # sched: [1:0.50] -; HASWELL-NEXT: shrq $7, %rdi # sched: [1:0.50] -; HASWELL-NEXT: sarq $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shlq $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: shrq $7, (%rdx) # sched: [7:1.00] -; HASWELL-NEXT: sarq %cl, %rdi # sched: [3:1.00] -; HASWELL-NEXT: shlq %cl, %rdi # sched: [3:1.00] -; HASWELL-NEXT: shrq %cl, %rdi # sched: [3:1.00] -; HASWELL-NEXT: sarq %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: shlq %cl, (%rdx) # sched: [9:1.00] -; HASWELL-NEXT: shrq %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rolq %rdi # sched: [2:1.00] +; HASWELL-NEXT: rorq %rdi # sched: [2:1.00] +; HASWELL-NEXT: rolq (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rorq (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rolq $7, %rdi # sched: [2:1.00] +; HASWELL-NEXT: rorq $7, %rdi # sched: [2:1.00] +; HASWELL-NEXT: rolq $7, (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rorq $7, (%rdx) # sched: [8:1.00] +; HASWELL-NEXT: rolq %cl, %rdi # sched: [3:1.00] +; HASWELL-NEXT: rorq %cl, %rdi # sched: [3:1.00] +; HASWELL-NEXT: rolq %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: rorq %cl, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sar_shl_shr_64: +; BROADWELL-LABEL: test_rol_ror_64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: sarq %rdi # sched: [1:0.50] -; BROADWELL-NEXT: shlq %rdi # sched: [1:0.50] -; BROADWELL-NEXT: shrq %rdi # sched: [1:0.50] -; BROADWELL-NEXT: sarq (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shlq (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shrq (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: sarq $7, %rdi # sched: [1:0.50] -; BROADWELL-NEXT: shlq $7, %rdi # sched: [1:0.50] -; BROADWELL-NEXT: shrq $7, %rdi # sched: [1:0.50] -; BROADWELL-NEXT: sarq $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shlq $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: shrq $7, (%rdx) # sched: [6:1.00] -; BROADWELL-NEXT: sarq %cl, %rdi # sched: [3:1.00] -; BROADWELL-NEXT: shlq %cl, %rdi # sched: [3:1.00] -; BROADWELL-NEXT: shrq %cl, %rdi # sched: [3:1.00] -; BROADWELL-NEXT: sarq %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: shlq %cl, (%rdx) # sched: [8:1.00] -; BROADWELL-NEXT: shrq %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rolq %rdi # sched: [2:1.00] +; BROADWELL-NEXT: rorq %rdi # sched: [2:1.00] +; BROADWELL-NEXT: rolq (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rorq (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rolq $7, %rdi # sched: [2:1.00] +; BROADWELL-NEXT: rorq $7, %rdi # sched: [2:1.00] +; BROADWELL-NEXT: rolq $7, (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rorq $7, (%rdx) # sched: [7:1.00] +; BROADWELL-NEXT: rolq %cl, %rdi # sched: [3:1.00] +; BROADWELL-NEXT: rorq %cl, %rdi # sched: [3:1.00] +; BROADWELL-NEXT: rolq %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: rorq %cl, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sar_shl_shr_64: +; SKYLAKE-LABEL: test_rol_ror_64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: sarq %rdi # sched: [1:0.50] -; SKYLAKE-NEXT: shlq %rdi # sched: [1:0.50] -; SKYLAKE-NEXT: shrq %rdi # sched: [1:0.50] -; SKYLAKE-NEXT: sarq (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shlq (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shrq (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: sarq $7, %rdi # sched: [1:0.50] -; SKYLAKE-NEXT: shlq $7, %rdi # sched: [1:0.50] -; SKYLAKE-NEXT: shrq $7, %rdi # sched: [1:0.50] -; SKYLAKE-NEXT: sarq $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shlq $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: shrq $7, (%rdx) # sched: [6:1.00] -; SKYLAKE-NEXT: sarq %cl, %rdi # sched: [3:1.50] -; SKYLAKE-NEXT: shlq %cl, %rdi # sched: [3:1.50] -; SKYLAKE-NEXT: shrq %cl, %rdi # sched: [3:1.50] -; SKYLAKE-NEXT: sarq %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: shlq %cl, (%rdx) # sched: [8:1.50] -; SKYLAKE-NEXT: shrq %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rolq %rdi # sched: [2:1.00] +; SKYLAKE-NEXT: rorq %rdi # sched: [2:1.00] +; SKYLAKE-NEXT: rolq (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rorq (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rolq $7, %rdi # sched: [2:1.00] +; SKYLAKE-NEXT: rorq $7, %rdi # sched: [2:1.00] +; SKYLAKE-NEXT: rolq $7, (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rorq $7, (%rdx) # sched: [7:1.00] +; SKYLAKE-NEXT: rolq %cl, %rdi # sched: [3:1.50] +; SKYLAKE-NEXT: rorq %cl, %rdi # sched: [3:1.50] +; SKYLAKE-NEXT: rolq %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: rorq %cl, (%rdx) # sched: [8:1.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sar_shl_shr_64: +; SKX-LABEL: test_rol_ror_64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: sarq %rdi # sched: [1:0.50] -; SKX-NEXT: shlq %rdi # sched: [1:0.50] -; SKX-NEXT: shrq %rdi # sched: [1:0.50] -; SKX-NEXT: sarq (%rdx) # sched: [6:1.00] -; SKX-NEXT: shlq (%rdx) # sched: [6:1.00] -; SKX-NEXT: shrq (%rdx) # sched: [6:1.00] -; SKX-NEXT: sarq $7, %rdi # sched: [1:0.50] -; SKX-NEXT: shlq $7, %rdi # sched: [1:0.50] -; SKX-NEXT: shrq $7, %rdi # sched: [1:0.50] -; SKX-NEXT: sarq $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: shlq $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: shrq $7, (%rdx) # sched: [6:1.00] -; SKX-NEXT: sarq %cl, %rdi # sched: [3:1.50] -; SKX-NEXT: shlq %cl, %rdi # sched: [3:1.50] -; SKX-NEXT: shrq %cl, %rdi # sched: [3:1.50] -; SKX-NEXT: sarq %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: shlq %cl, (%rdx) # sched: [8:1.50] -; SKX-NEXT: shrq %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rolq %rdi # sched: [2:1.00] +; SKX-NEXT: rorq %rdi # sched: [2:1.00] +; SKX-NEXT: rolq (%rdx) # sched: [7:1.00] +; SKX-NEXT: rorq (%rdx) # sched: [7:1.00] +; SKX-NEXT: rolq $7, %rdi # sched: [2:1.00] +; SKX-NEXT: rorq $7, %rdi # sched: [2:1.00] +; SKX-NEXT: rolq $7, (%rdx) # sched: [7:1.00] +; SKX-NEXT: rorq $7, (%rdx) # sched: [7:1.00] +; SKX-NEXT: rolq %cl, %rdi # sched: [3:1.50] +; SKX-NEXT: rorq %cl, %rdi # sched: [3:1.50] +; SKX-NEXT: rolq %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: rorq %cl, (%rdx) # sched: [8:1.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sar_shl_shr_64: +; BTVER2-LABEL: test_rol_ror_64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: sarq %rdi # sched: [1:0.50] -; BTVER2-NEXT: shlq %rdi # sched: [1:0.50] -; BTVER2-NEXT: shrq %rdi # sched: [1:0.50] -; BTVER2-NEXT: sarq (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shlq (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrq (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: sarq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: shlq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: shrq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: sarq $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shlq $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrq $7, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: sarq %cl, %rdi # sched: [1:0.50] -; BTVER2-NEXT: shlq %cl, %rdi # sched: [1:0.50] -; BTVER2-NEXT: shrq %cl, %rdi # sched: [1:0.50] -; BTVER2-NEXT: sarq %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shlq %cl, (%rdx) # sched: [4:1.00] -; BTVER2-NEXT: shrq %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rolq %rdi # sched: [1:0.50] +; BTVER2-NEXT: rorq %rdi # sched: [1:0.50] +; BTVER2-NEXT: rolq (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorq (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rolq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: rorq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: rolq $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorq $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rolq %cl, %rdi # sched: [1:0.50] +; BTVER2-NEXT: rorq %cl, %rdi # sched: [1:0.50] +; BTVER2-NEXT: rolq %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: rorq %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sar_shl_shr_64: +; ZNVER1-LABEL: test_rol_ror_64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: sarq %rdi # sched: [1:0.25] -; ZNVER1-NEXT: shlq %rdi # sched: [1:0.25] -; ZNVER1-NEXT: shrq %rdi # sched: [1:0.25] -; ZNVER1-NEXT: sarq (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shlq (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrq (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: sarq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: shlq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: shrq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: sarq $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shlq $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrq $7, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: sarq %cl, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: shlq %cl, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: shrq %cl, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: sarq %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: shlq %cl, (%rdx) # sched: [5:1.00] -; ZNVER1-NEXT: shrq %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rolq %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rorq %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rolq (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorq (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rolq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rorq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rolq $7, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorq $7, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rolq %cl, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rorq %cl, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: rolq %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: rorq %cl, (%rdx) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "sarq $0 \0A\09 shlq $0 \0A\09 shrq $0 \0A\09 sarq $2 \0A\09 shlq $2 \0A\09 shrq $2 \0A\09 sarq $3, $0 \0A\09 shlq $3, $0 \0A\09 shrq $3, $0 \0A\09 sarq $3, $2 \0A\09 shlq $3, $2 \0A\09 shrq $3, $2 \0A\09 sarq %CL, $0 \0A\09 shlq %CL, $0 \0A\09 shrq %CL, $0 \0A\09 sarq %CL, $2 \0A\09 shlq %CL, $2 \0A\09 shrq %CL, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7) + call void asm sideeffect "rolq $0 \0A\09 rorq $0 \0A\09 rolq $2 \0A\09 rorq $2 \0A\09 rolq $3, $0 \0A\09 rorq $3, $0 \0A\09 rolq $3, $2 \0A\09 rorq $3, $2 \0A\09 rolq %CL, $0 \0A\09 rorq %CL, $0 \0A\09 rolq %CL, $2 \0A\09 rorq %CL, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7) ret void } -define void @test_sbb_8(i8 %a0, i8* %a1) optsize { -; GENERIC-LABEL: test_sbb_8: +define void @test_sar_shl_shr_8(i8 %a0, i8 %a1, i8 *%a2) optsize { +; GENERIC-LABEL: test_sar_shl_shr_8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: sbbb $7, %al # sched: [3:1.00] -; GENERIC-NEXT: sbbb $7, %dil # sched: [2:0.67] -; GENERIC-NEXT: sbbb $7, (%rsi) # sched: [9:1.00] -; GENERIC-NEXT: sbbb %dil, %dil # sched: [2:0.67] -; GENERIC-NEXT: sbbb %dil, (%rsi) # sched: [9:1.00] -; GENERIC-NEXT: sbbb (%rsi), %dil # sched: [7:0.67] +; GENERIC-NEXT: sarb %dil # sched: [1:0.50] +; GENERIC-NEXT: shlb %dil # sched: [1:0.50] +; GENERIC-NEXT: shrb %dil # sched: [1:0.50] +; GENERIC-NEXT: sarb (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: shlb (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shrb (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: sarb $7, %dil # sched: [1:0.50] +; GENERIC-NEXT: shlb $7, %dil # sched: [1:0.50] +; GENERIC-NEXT: shrb $7, %dil # sched: [1:0.50] +; GENERIC-NEXT: sarb $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shlb $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shrb $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: sarb %cl, %dil # sched: [3:1.50] +; GENERIC-NEXT: shlb %cl, %dil # sched: [3:1.50] +; GENERIC-NEXT: shrb %cl, %dil # sched: [3:1.50] +; GENERIC-NEXT: sarb %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: shlb %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: shrb %cl, (%rdx) # sched: [9:1.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sbb_8: +; ATOM-LABEL: test_sar_shl_shr_8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: sbbb $7, %al # sched: [1:0.50] -; ATOM-NEXT: sbbb $7, %dil # sched: [1:0.50] -; ATOM-NEXT: sbbb $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: sbbb %dil, %dil # sched: [1:0.50] -; ATOM-NEXT: sbbb %dil, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: sbbb (%rsi), %dil # sched: [1:1.00] +; ATOM-NEXT: sarb %dil # sched: [1:1.00] +; ATOM-NEXT: shlb %dil # sched: [1:1.00] +; ATOM-NEXT: shrb %dil # sched: [1:1.00] +; ATOM-NEXT: sarb (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shlb (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrb (%rdx) # sched: [1:1.00] +; ATOM-NEXT: sarb $7, %dil # sched: [1:1.00] +; ATOM-NEXT: shlb $7, %dil # sched: [1:1.00] +; ATOM-NEXT: shrb $7, %dil # sched: [1:1.00] +; ATOM-NEXT: sarb $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shlb $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrb $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: sarb %cl, %dil # sched: [1:1.00] +; ATOM-NEXT: shlb %cl, %dil # sched: [1:1.00] +; ATOM-NEXT: shrb %cl, %dil # sched: [1:1.00] +; ATOM-NEXT: sarb %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shlb %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrb %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sbb_8: +; SLM-LABEL: test_sar_shl_shr_8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: sbbb $7, %al # sched: [1:0.50] -; SLM-NEXT: sbbb $7, %dil # sched: [1:0.50] -; SLM-NEXT: sbbb $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: sbbb %dil, %dil # sched: [1:0.50] -; SLM-NEXT: sbbb %dil, (%rsi) # sched: [4:2.00] -; SLM-NEXT: sbbb (%rsi), %dil # sched: [4:1.00] +; SLM-NEXT: sarb %dil # sched: [1:1.00] +; SLM-NEXT: shlb %dil # sched: [1:1.00] +; SLM-NEXT: shrb %dil # sched: [1:1.00] +; SLM-NEXT: sarb (%rdx) # sched: [4:2.00] +; SLM-NEXT: shlb (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrb (%rdx) # sched: [4:2.00] +; SLM-NEXT: sarb $7, %dil # sched: [1:1.00] +; SLM-NEXT: shlb $7, %dil # sched: [1:1.00] +; SLM-NEXT: shrb $7, %dil # sched: [1:1.00] +; SLM-NEXT: sarb $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shlb $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrb $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: sarb %cl, %dil # sched: [1:1.00] +; SLM-NEXT: shlb %cl, %dil # sched: [1:1.00] +; SLM-NEXT: shrb %cl, %dil # sched: [1:1.00] +; SLM-NEXT: sarb %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shlb %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrb %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sbb_8: +; SANDY-LABEL: test_sar_shl_shr_8: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: sbbb $7, %al # sched: [3:1.00] -; SANDY-NEXT: sbbb $7, %dil # sched: [2:0.67] -; SANDY-NEXT: sbbb $7, (%rsi) # sched: [9:1.00] -; SANDY-NEXT: sbbb %dil, %dil # sched: [2:0.67] -; SANDY-NEXT: sbbb %dil, (%rsi) # sched: [9:1.00] -; SANDY-NEXT: sbbb (%rsi), %dil # sched: [7:0.67] +; SANDY-NEXT: sarb %dil # sched: [1:0.50] +; SANDY-NEXT: shlb %dil # sched: [1:0.50] +; SANDY-NEXT: shrb %dil # sched: [1:0.50] +; SANDY-NEXT: sarb (%rdx) # sched: [5:1.00] +; SANDY-NEXT: shlb (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shrb (%rdx) # sched: [5:1.00] +; SANDY-NEXT: sarb $7, %dil # sched: [1:0.50] +; SANDY-NEXT: shlb $7, %dil # sched: [1:0.50] +; SANDY-NEXT: shrb $7, %dil # sched: [1:0.50] +; SANDY-NEXT: sarb $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shlb $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shrb $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: sarb %cl, %dil # sched: [3:1.50] +; SANDY-NEXT: shlb %cl, %dil # sched: [3:1.50] +; SANDY-NEXT: shrb %cl, %dil # sched: [3:1.50] +; SANDY-NEXT: sarb %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: shlb %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: shrb %cl, (%rdx) # sched: [9:1.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sbb_8: +; HASWELL-LABEL: test_sar_shl_shr_8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: sbbb $7, %al # sched: [2:0.50] -; HASWELL-NEXT: sbbb $7, %dil # sched: [2:0.50] -; HASWELL-NEXT: sbbb $7, (%rsi) # sched: [9:1.00] -; HASWELL-NEXT: sbbb %dil, %dil # sched: [2:0.50] -; HASWELL-NEXT: sbbb %dil, (%rsi) # sched: [9:1.00] -; HASWELL-NEXT: sbbb (%rsi), %dil # sched: [7:0.50] +; HASWELL-NEXT: sarb %dil # sched: [1:0.50] +; HASWELL-NEXT: shlb %dil # sched: [1:0.50] +; HASWELL-NEXT: shrb %dil # sched: [1:0.50] +; HASWELL-NEXT: sarb (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shlb (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shrb (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: sarb $7, %dil # sched: [1:0.50] +; HASWELL-NEXT: shlb $7, %dil # sched: [1:0.50] +; HASWELL-NEXT: shrb $7, %dil # sched: [1:0.50] +; HASWELL-NEXT: sarb $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shlb $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shrb $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: sarb %cl, %dil # sched: [3:1.00] +; HASWELL-NEXT: shlb %cl, %dil # sched: [3:1.00] +; HASWELL-NEXT: shrb %cl, %dil # sched: [3:1.00] +; HASWELL-NEXT: sarb %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: shlb %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: shrb %cl, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sbb_8: +; BROADWELL-LABEL: test_sar_shl_shr_8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: sbbb $7, %al # sched: [2:0.50] -; BROADWELL-NEXT: sbbb $7, %dil # sched: [2:0.50] -; BROADWELL-NEXT: sbbb $7, (%rsi) # sched: [8:1.00] -; BROADWELL-NEXT: sbbb %dil, %dil # sched: [1:0.50] -; BROADWELL-NEXT: sbbb %dil, (%rsi) # sched: [8:1.00] -; BROADWELL-NEXT: sbbb (%rsi), %dil # sched: [6:0.50] +; BROADWELL-NEXT: sarb %dil # sched: [1:0.50] +; BROADWELL-NEXT: shlb %dil # sched: [1:0.50] +; BROADWELL-NEXT: shrb %dil # sched: [1:0.50] +; BROADWELL-NEXT: sarb (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shlb (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shrb (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: sarb $7, %dil # sched: [1:0.50] +; BROADWELL-NEXT: shlb $7, %dil # sched: [1:0.50] +; BROADWELL-NEXT: shrb $7, %dil # sched: [1:0.50] +; BROADWELL-NEXT: sarb $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shlb $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shrb $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: sarb %cl, %dil # sched: [3:1.00] +; BROADWELL-NEXT: shlb %cl, %dil # sched: [3:1.00] +; BROADWELL-NEXT: shrb %cl, %dil # sched: [3:1.00] +; BROADWELL-NEXT: sarb %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: shlb %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: shrb %cl, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sbb_8: +; SKYLAKE-LABEL: test_sar_shl_shr_8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: sbbb $7, %al # sched: [2:0.50] -; SKYLAKE-NEXT: sbbb $7, %dil # sched: [2:0.50] -; SKYLAKE-NEXT: sbbb $7, (%rsi) # sched: [8:1.00] -; SKYLAKE-NEXT: sbbb %dil, %dil # sched: [1:0.50] -; SKYLAKE-NEXT: sbbb %dil, (%rsi) # sched: [8:1.00] -; SKYLAKE-NEXT: sbbb (%rsi), %dil # sched: [6:0.50] +; SKYLAKE-NEXT: sarb %dil # sched: [1:0.50] +; SKYLAKE-NEXT: shlb %dil # sched: [1:0.50] +; SKYLAKE-NEXT: shrb %dil # sched: [1:0.50] +; SKYLAKE-NEXT: sarb (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shlb (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shrb (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: sarb $7, %dil # sched: [1:0.50] +; SKYLAKE-NEXT: shlb $7, %dil # sched: [1:0.50] +; SKYLAKE-NEXT: shrb $7, %dil # sched: [1:0.50] +; SKYLAKE-NEXT: sarb $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shlb $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shrb $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: sarb %cl, %dil # sched: [3:1.50] +; SKYLAKE-NEXT: shlb %cl, %dil # sched: [3:1.50] +; SKYLAKE-NEXT: shrb %cl, %dil # sched: [3:1.50] +; SKYLAKE-NEXT: sarb %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: shlb %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: shrb %cl, (%rdx) # sched: [8:1.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sbb_8: +; SKX-LABEL: test_sar_shl_shr_8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: sbbb $7, %al # sched: [2:0.50] -; SKX-NEXT: sbbb $7, %dil # sched: [2:0.50] -; SKX-NEXT: sbbb $7, (%rsi) # sched: [8:1.00] -; SKX-NEXT: sbbb %dil, %dil # sched: [1:0.50] -; SKX-NEXT: sbbb %dil, (%rsi) # sched: [8:1.00] -; SKX-NEXT: sbbb (%rsi), %dil # sched: [6:0.50] +; SKX-NEXT: sarb %dil # sched: [1:0.50] +; SKX-NEXT: shlb %dil # sched: [1:0.50] +; SKX-NEXT: shrb %dil # sched: [1:0.50] +; SKX-NEXT: sarb (%rdx) # sched: [6:1.00] +; SKX-NEXT: shlb (%rdx) # sched: [6:1.00] +; SKX-NEXT: shrb (%rdx) # sched: [6:1.00] +; SKX-NEXT: sarb $7, %dil # sched: [1:0.50] +; SKX-NEXT: shlb $7, %dil # sched: [1:0.50] +; SKX-NEXT: shrb $7, %dil # sched: [1:0.50] +; SKX-NEXT: sarb $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: shlb $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: shrb $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: sarb %cl, %dil # sched: [3:1.50] +; SKX-NEXT: shlb %cl, %dil # sched: [3:1.50] +; SKX-NEXT: shrb %cl, %dil # sched: [3:1.50] +; SKX-NEXT: sarb %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: shlb %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: shrb %cl, (%rdx) # sched: [8:1.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sbb_8: +; BTVER2-LABEL: test_sar_shl_shr_8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: sbbb $7, %al # sched: [1:0.50] -; BTVER2-NEXT: sbbb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: sbbb $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: sbbb %dil, %dil # sched: [1:0.50] -; BTVER2-NEXT: sbbb %dil, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: sbbb (%rsi), %dil # sched: [4:1.00] +; BTVER2-NEXT: sarb %dil # sched: [1:0.50] +; BTVER2-NEXT: shlb %dil # sched: [1:0.50] +; BTVER2-NEXT: shrb %dil # sched: [1:0.50] +; BTVER2-NEXT: sarb (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shlb (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrb (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: sarb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: shlb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: shrb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: sarb $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shlb $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrb $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: sarb %cl, %dil # sched: [1:0.50] +; BTVER2-NEXT: shlb %cl, %dil # sched: [1:0.50] +; BTVER2-NEXT: shrb %cl, %dil # sched: [1:0.50] +; BTVER2-NEXT: sarb %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shlb %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrb %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sbb_8: +; ZNVER1-LABEL: test_sar_shl_shr_8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: sbbb $7, %al # sched: [1:0.25] -; ZNVER1-NEXT: sbbb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: sbbb $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: sbbb %dil, %dil # sched: [1:0.25] -; ZNVER1-NEXT: sbbb %dil, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: sbbb (%rsi), %dil # sched: [5:0.50] +; ZNVER1-NEXT: sarb %dil # sched: [1:0.25] +; ZNVER1-NEXT: shlb %dil # sched: [1:0.25] +; ZNVER1-NEXT: shrb %dil # sched: [1:0.25] +; ZNVER1-NEXT: sarb (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shlb (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrb (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: sarb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: shlb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: shrb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: sarb $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shlb $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrb $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: sarb %cl, %dil # sched: [1:0.25] +; ZNVER1-NEXT: shlb %cl, %dil # sched: [1:0.25] +; ZNVER1-NEXT: shrb %cl, %dil # sched: [1:0.25] +; ZNVER1-NEXT: sarb %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: shlb %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: shrb %cl, (%rdx) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "sbbb $2, %AL \0A\09 sbbb $2, $0 \0A\09 sbbb $2, $1 \0A\09 sbbb $0, $0 \0A\09 sbbb $0, $1 \0A\09 sbbb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind + call void asm sideeffect "sarb $0 \0A\09 shlb $0 \0A\09 shrb $0 \0A\09 sarb $2 \0A\09 shlb $2 \0A\09 shrb $2 \0A\09 sarb $3, $0 \0A\09 shlb $3, $0 \0A\09 shrb $3, $0 \0A\09 sarb $3, $2 \0A\09 shlb $3, $2 \0A\09 shrb $3, $2 \0A\09 sarb %CL, $0 \0A\09 shlb %CL, $0 \0A\09 shrb %CL, $0 \0A\09 sarb %CL, $2 \0A\09 shlb %CL, $2 \0A\09 shrb %CL, $2", "r,r,*m,i"(i8 %a0, i8 %a1, i8 *%a2, i8 7) ret void } -define void @test_sbb_16(i16 %a0, i16* %a1) optsize { -; GENERIC-LABEL: test_sbb_16: +define void @test_sar_shl_shr_16(i16 %a0, i16 %a1, i16 *%a2) optsize { +; GENERIC-LABEL: test_sar_shl_shr_16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: sbbw $511, %ax # imm = 0x1FF -; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: sbbw $511, %di # imm = 0x1FF -; GENERIC-NEXT: # sched: [2:0.67] -; GENERIC-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; GENERIC-NEXT: # sched: [9:1.00] -; GENERIC-NEXT: sbbw $7, %di # sched: [2:0.67] -; GENERIC-NEXT: sbbw $7, (%rsi) # sched: [9:1.00] -; GENERIC-NEXT: sbbw %di, %di # sched: [2:0.67] -; GENERIC-NEXT: sbbw %di, (%rsi) # sched: [9:1.00] -; GENERIC-NEXT: sbbw (%rsi), %di # sched: [7:0.67] -; GENERIC-NEXT: #NO_APP -; GENERIC-NEXT: retq # sched: [1:1.00] -; -; ATOM-LABEL: test_sbb_16: -; ATOM: # %bb.0: -; ATOM-NEXT: #APP -; ATOM-NEXT: sbbw $511, %ax # imm = 0x1FF -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: sbbw $511, %di # imm = 0x1FF -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; ATOM-NEXT: # sched: [1:1.00] -; ATOM-NEXT: sbbw $7, %di # sched: [1:0.50] -; ATOM-NEXT: sbbw $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: sbbw %di, %di # sched: [1:0.50] -; ATOM-NEXT: sbbw %di, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: sbbw (%rsi), %di # sched: [1:1.00] +; GENERIC-NEXT: sarw %di # sched: [1:0.50] +; GENERIC-NEXT: shlw %di # sched: [1:0.50] +; GENERIC-NEXT: shrw %di # sched: [1:0.50] +; GENERIC-NEXT: sarw (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: shlw (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shrw (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: sarw $7, %di # sched: [1:0.50] +; GENERIC-NEXT: shlw $7, %di # sched: [1:0.50] +; GENERIC-NEXT: shrw $7, %di # sched: [1:0.50] +; GENERIC-NEXT: sarw $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shlw $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shrw $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: sarw %cl, %di # sched: [3:1.50] +; GENERIC-NEXT: shlw %cl, %di # sched: [3:1.50] +; GENERIC-NEXT: shrw %cl, %di # sched: [3:1.50] +; GENERIC-NEXT: sarw %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: shlw %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: shrw %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_sar_shl_shr_16: +; ATOM: # %bb.0: +; ATOM-NEXT: #APP +; ATOM-NEXT: sarw %di # sched: [1:1.00] +; ATOM-NEXT: shlw %di # sched: [1:1.00] +; ATOM-NEXT: shrw %di # sched: [1:1.00] +; ATOM-NEXT: sarw (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shlw (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrw (%rdx) # sched: [1:1.00] +; ATOM-NEXT: sarw $7, %di # sched: [1:1.00] +; ATOM-NEXT: shlw $7, %di # sched: [1:1.00] +; ATOM-NEXT: shrw $7, %di # sched: [1:1.00] +; ATOM-NEXT: sarw $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shlw $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrw $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: sarw %cl, %di # sched: [1:1.00] +; ATOM-NEXT: shlw %cl, %di # sched: [1:1.00] +; ATOM-NEXT: shrw %cl, %di # sched: [1:1.00] +; ATOM-NEXT: sarw %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shlw %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrw %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sbb_16: +; SLM-LABEL: test_sar_shl_shr_16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: sbbw $511, %ax # imm = 0x1FF -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: sbbw $511, %di # imm = 0x1FF -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; SLM-NEXT: # sched: [4:2.00] -; SLM-NEXT: sbbw $7, %di # sched: [1:0.50] -; SLM-NEXT: sbbw $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: sbbw %di, %di # sched: [1:0.50] -; SLM-NEXT: sbbw %di, (%rsi) # sched: [4:2.00] -; SLM-NEXT: sbbw (%rsi), %di # sched: [4:1.00] +; SLM-NEXT: sarw %di # sched: [1:1.00] +; SLM-NEXT: shlw %di # sched: [1:1.00] +; SLM-NEXT: shrw %di # sched: [1:1.00] +; SLM-NEXT: sarw (%rdx) # sched: [4:2.00] +; SLM-NEXT: shlw (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrw (%rdx) # sched: [4:2.00] +; SLM-NEXT: sarw $7, %di # sched: [1:1.00] +; SLM-NEXT: shlw $7, %di # sched: [1:1.00] +; SLM-NEXT: shrw $7, %di # sched: [1:1.00] +; SLM-NEXT: sarw $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shlw $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrw $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: sarw %cl, %di # sched: [1:1.00] +; SLM-NEXT: shlw %cl, %di # sched: [1:1.00] +; SLM-NEXT: shrw %cl, %di # sched: [1:1.00] +; SLM-NEXT: sarw %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shlw %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrw %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sbb_16: +; SANDY-LABEL: test_sar_shl_shr_16: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: sbbw $511, %ax # imm = 0x1FF -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: sbbw $511, %di # imm = 0x1FF -; SANDY-NEXT: # sched: [2:0.67] -; SANDY-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; SANDY-NEXT: # sched: [9:1.00] -; SANDY-NEXT: sbbw $7, %di # sched: [2:0.67] -; SANDY-NEXT: sbbw $7, (%rsi) # sched: [9:1.00] -; SANDY-NEXT: sbbw %di, %di # sched: [2:0.67] -; SANDY-NEXT: sbbw %di, (%rsi) # sched: [9:1.00] -; SANDY-NEXT: sbbw (%rsi), %di # sched: [7:0.67] +; SANDY-NEXT: sarw %di # sched: [1:0.50] +; SANDY-NEXT: shlw %di # sched: [1:0.50] +; SANDY-NEXT: shrw %di # sched: [1:0.50] +; SANDY-NEXT: sarw (%rdx) # sched: [5:1.00] +; SANDY-NEXT: shlw (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shrw (%rdx) # sched: [5:1.00] +; SANDY-NEXT: sarw $7, %di # sched: [1:0.50] +; SANDY-NEXT: shlw $7, %di # sched: [1:0.50] +; SANDY-NEXT: shrw $7, %di # sched: [1:0.50] +; SANDY-NEXT: sarw $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shlw $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shrw $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: sarw %cl, %di # sched: [3:1.50] +; SANDY-NEXT: shlw %cl, %di # sched: [3:1.50] +; SANDY-NEXT: shrw %cl, %di # sched: [3:1.50] +; SANDY-NEXT: sarw %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: shlw %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: shrw %cl, (%rdx) # sched: [9:1.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sbb_16: +; HASWELL-LABEL: test_sar_shl_shr_16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: sbbw $511, %ax # imm = 0x1FF -; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: sbbw $511, %di # imm = 0x1FF -; HASWELL-NEXT: # sched: [2:0.50] -; HASWELL-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; HASWELL-NEXT: # sched: [9:1.00] -; HASWELL-NEXT: sbbw $7, %di # sched: [2:0.50] -; HASWELL-NEXT: sbbw $7, (%rsi) # sched: [9:1.00] -; HASWELL-NEXT: sbbw %di, %di # sched: [2:0.50] -; HASWELL-NEXT: sbbw %di, (%rsi) # sched: [9:1.00] -; HASWELL-NEXT: sbbw (%rsi), %di # sched: [7:0.50] +; HASWELL-NEXT: sarw %di # sched: [1:0.50] +; HASWELL-NEXT: shlw %di # sched: [1:0.50] +; HASWELL-NEXT: shrw %di # sched: [1:0.50] +; HASWELL-NEXT: sarw (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shlw (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shrw (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: sarw $7, %di # sched: [1:0.50] +; HASWELL-NEXT: shlw $7, %di # sched: [1:0.50] +; HASWELL-NEXT: shrw $7, %di # sched: [1:0.50] +; HASWELL-NEXT: sarw $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shlw $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shrw $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: sarw %cl, %di # sched: [3:1.00] +; HASWELL-NEXT: shlw %cl, %di # sched: [3:1.00] +; HASWELL-NEXT: shrw %cl, %di # sched: [3:1.00] +; HASWELL-NEXT: sarw %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: shlw %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: shrw %cl, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sbb_16: +; BROADWELL-LABEL: test_sar_shl_shr_16: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: sbbw $511, %ax # imm = 0x1FF -; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: sbbw $511, %di # imm = 0x1FF -; BROADWELL-NEXT: # sched: [1:0.50] -; BROADWELL-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; BROADWELL-NEXT: # sched: [8:1.00] -; BROADWELL-NEXT: sbbw $7, %di # sched: [1:0.50] -; BROADWELL-NEXT: sbbw $7, (%rsi) # sched: [8:1.00] -; BROADWELL-NEXT: sbbw %di, %di # sched: [1:0.50] -; BROADWELL-NEXT: sbbw %di, (%rsi) # sched: [8:1.00] -; BROADWELL-NEXT: sbbw (%rsi), %di # sched: [6:0.50] +; BROADWELL-NEXT: sarw %di # sched: [1:0.50] +; BROADWELL-NEXT: shlw %di # sched: [1:0.50] +; BROADWELL-NEXT: shrw %di # sched: [1:0.50] +; BROADWELL-NEXT: sarw (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shlw (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shrw (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: sarw $7, %di # sched: [1:0.50] +; BROADWELL-NEXT: shlw $7, %di # sched: [1:0.50] +; BROADWELL-NEXT: shrw $7, %di # sched: [1:0.50] +; BROADWELL-NEXT: sarw $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shlw $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shrw $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: sarw %cl, %di # sched: [3:1.00] +; BROADWELL-NEXT: shlw %cl, %di # sched: [3:1.00] +; BROADWELL-NEXT: shrw %cl, %di # sched: [3:1.00] +; BROADWELL-NEXT: sarw %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: shlw %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: shrw %cl, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sbb_16: +; SKYLAKE-LABEL: test_sar_shl_shr_16: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: sbbw $511, %ax # imm = 0x1FF -; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: sbbw $511, %di # imm = 0x1FF -; SKYLAKE-NEXT: # sched: [1:0.50] -; SKYLAKE-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; SKYLAKE-NEXT: # sched: [8:1.00] -; SKYLAKE-NEXT: sbbw $7, %di # sched: [1:0.50] -; SKYLAKE-NEXT: sbbw $7, (%rsi) # sched: [8:1.00] -; SKYLAKE-NEXT: sbbw %di, %di # sched: [1:0.50] -; SKYLAKE-NEXT: sbbw %di, (%rsi) # sched: [8:1.00] -; SKYLAKE-NEXT: sbbw (%rsi), %di # sched: [6:0.50] +; SKYLAKE-NEXT: sarw %di # sched: [1:0.50] +; SKYLAKE-NEXT: shlw %di # sched: [1:0.50] +; SKYLAKE-NEXT: shrw %di # sched: [1:0.50] +; SKYLAKE-NEXT: sarw (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shlw (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shrw (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: sarw $7, %di # sched: [1:0.50] +; SKYLAKE-NEXT: shlw $7, %di # sched: [1:0.50] +; SKYLAKE-NEXT: shrw $7, %di # sched: [1:0.50] +; SKYLAKE-NEXT: sarw $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shlw $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shrw $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: sarw %cl, %di # sched: [3:1.50] +; SKYLAKE-NEXT: shlw %cl, %di # sched: [3:1.50] +; SKYLAKE-NEXT: shrw %cl, %di # sched: [3:1.50] +; SKYLAKE-NEXT: sarw %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: shlw %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: shrw %cl, (%rdx) # sched: [8:1.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sbb_16: +; SKX-LABEL: test_sar_shl_shr_16: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: sbbw $511, %ax # imm = 0x1FF -; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: sbbw $511, %di # imm = 0x1FF -; SKX-NEXT: # sched: [1:0.50] -; SKX-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; SKX-NEXT: # sched: [8:1.00] -; SKX-NEXT: sbbw $7, %di # sched: [1:0.50] -; SKX-NEXT: sbbw $7, (%rsi) # sched: [8:1.00] -; SKX-NEXT: sbbw %di, %di # sched: [1:0.50] -; SKX-NEXT: sbbw %di, (%rsi) # sched: [8:1.00] -; SKX-NEXT: sbbw (%rsi), %di # sched: [6:0.50] +; SKX-NEXT: sarw %di # sched: [1:0.50] +; SKX-NEXT: shlw %di # sched: [1:0.50] +; SKX-NEXT: shrw %di # sched: [1:0.50] +; SKX-NEXT: sarw (%rdx) # sched: [6:1.00] +; SKX-NEXT: shlw (%rdx) # sched: [6:1.00] +; SKX-NEXT: shrw (%rdx) # sched: [6:1.00] +; SKX-NEXT: sarw $7, %di # sched: [1:0.50] +; SKX-NEXT: shlw $7, %di # sched: [1:0.50] +; SKX-NEXT: shrw $7, %di # sched: [1:0.50] +; SKX-NEXT: sarw $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: shlw $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: shrw $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: sarw %cl, %di # sched: [3:1.50] +; SKX-NEXT: shlw %cl, %di # sched: [3:1.50] +; SKX-NEXT: shrw %cl, %di # sched: [3:1.50] +; SKX-NEXT: sarw %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: shlw %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: shrw %cl, (%rdx) # sched: [8:1.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sbb_16: +; BTVER2-LABEL: test_sar_shl_shr_16: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: sbbw $511, %ax # imm = 0x1FF -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: sbbw $511, %di # imm = 0x1FF -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; BTVER2-NEXT: # sched: [4:1.00] -; BTVER2-NEXT: sbbw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: sbbw $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: sbbw %di, %di # sched: [1:0.50] -; BTVER2-NEXT: sbbw %di, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: sbbw (%rsi), %di # sched: [4:1.00] -; BTVER2-NEXT: #NO_APP -; BTVER2-NEXT: retq # sched: [4:1.00] -; -; ZNVER1-LABEL: test_sbb_16: -; ZNVER1: # %bb.0: -; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: sbbw $511, %ax # imm = 0x1FF -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: sbbw $511, %di # imm = 0x1FF -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: sbbw $511, (%rsi) # imm = 0x1FF -; ZNVER1-NEXT: # sched: [5:0.50] -; ZNVER1-NEXT: sbbw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: sbbw $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: sbbw %di, %di # sched: [1:0.25] -; ZNVER1-NEXT: sbbw %di, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: sbbw (%rsi), %di # sched: [5:0.50] +; BTVER2-NEXT: sarw %di # sched: [1:0.50] +; BTVER2-NEXT: shlw %di # sched: [1:0.50] +; BTVER2-NEXT: shrw %di # sched: [1:0.50] +; BTVER2-NEXT: sarw (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shlw (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrw (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: sarw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: shlw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: shrw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: sarw $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shlw $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrw $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: sarw %cl, %di # sched: [1:0.50] +; BTVER2-NEXT: shlw %cl, %di # sched: [1:0.50] +; BTVER2-NEXT: shrw %cl, %di # sched: [1:0.50] +; BTVER2-NEXT: sarw %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shlw %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrw %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retq # sched: [4:1.00] +; +; ZNVER1-LABEL: test_sar_shl_shr_16: +; ZNVER1: # %bb.0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: sarw %di # sched: [1:0.25] +; ZNVER1-NEXT: shlw %di # sched: [1:0.25] +; ZNVER1-NEXT: shrw %di # sched: [1:0.25] +; ZNVER1-NEXT: sarw (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shlw (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrw (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: sarw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: shlw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: shrw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: sarw $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shlw $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrw $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: sarw %cl, %di # sched: [1:0.25] +; ZNVER1-NEXT: shlw %cl, %di # sched: [1:0.25] +; ZNVER1-NEXT: shrw %cl, %di # sched: [1:0.25] +; ZNVER1-NEXT: sarw %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: shlw %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: shrw %cl, (%rdx) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "sbbw $2, %AX \0A\09 sbbw $2, $0 \0A\09 sbbw $2, $1 \0A\09 sbbw $3, $0 \0A\09 sbbw $3, $1 \0A\09 sbbw $0, $0 \0A\09 sbbw $0, $1 \0A\09 sbbw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind + call void asm sideeffect "sarw $0 \0A\09 shlw $0 \0A\09 shrw $0 \0A\09 sarw $2 \0A\09 shlw $2 \0A\09 shrw $2 \0A\09 sarw $3, $0 \0A\09 shlw $3, $0 \0A\09 shrw $3, $0 \0A\09 sarw $3, $2 \0A\09 shlw $3, $2 \0A\09 shrw $3, $2 \0A\09 sarw %CL, $0 \0A\09 shlw %CL, $0 \0A\09 shrw %CL, $0 \0A\09 sarw %CL, $2 \0A\09 shlw %CL, $2 \0A\09 shrw %CL, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7) ret void } -define void @test_sbb_32(i32 %a0, i32* %a1) optsize { -; GENERIC-LABEL: test_sbb_32: +define void @test_sar_shl_shr_32(i32 %a0, i32 %a1, i32 *%a2) optsize { +; GENERIC-LABEL: test_sar_shl_shr_32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [2:0.67] -; GENERIC-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [9:1.00] -; GENERIC-NEXT: sbbl $7, %edi # sched: [2:0.67] -; GENERIC-NEXT: sbbl $7, (%rsi) # sched: [9:1.00] -; GENERIC-NEXT: sbbl %edi, %edi # sched: [2:0.67] -; GENERIC-NEXT: sbbl %edi, (%rsi) # sched: [9:1.00] -; GENERIC-NEXT: sbbl (%rsi), %edi # sched: [7:0.67] +; GENERIC-NEXT: sarl %edi # sched: [1:0.50] +; GENERIC-NEXT: shll %edi # sched: [1:0.50] +; GENERIC-NEXT: shrl %edi # sched: [1:0.50] +; GENERIC-NEXT: sarl (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: shll (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shrl (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: sarl $7, %edi # sched: [1:0.50] +; GENERIC-NEXT: shll $7, %edi # sched: [1:0.50] +; GENERIC-NEXT: shrl $7, %edi # sched: [1:0.50] +; GENERIC-NEXT: sarl $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shll $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shrl $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: sarl %cl, %edi # sched: [3:1.50] +; GENERIC-NEXT: shll %cl, %edi # sched: [3:1.50] +; GENERIC-NEXT: shrl %cl, %edi # sched: [3:1.50] +; GENERIC-NEXT: sarl %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: shll %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: shrl %cl, (%rdx) # sched: [9:1.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sbb_32: +; ATOM-LABEL: test_sar_shl_shr_32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:1.00] -; ATOM-NEXT: sbbl $7, %edi # sched: [1:0.50] -; ATOM-NEXT: sbbl $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: sbbl %edi, %edi # sched: [1:0.50] -; ATOM-NEXT: sbbl %edi, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: sbbl (%rsi), %edi # sched: [1:1.00] +; ATOM-NEXT: sarl %edi # sched: [1:1.00] +; ATOM-NEXT: shll %edi # sched: [1:1.00] +; ATOM-NEXT: shrl %edi # sched: [1:1.00] +; ATOM-NEXT: sarl (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shll (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrl (%rdx) # sched: [1:1.00] +; ATOM-NEXT: sarl $7, %edi # sched: [1:1.00] +; ATOM-NEXT: shll $7, %edi # sched: [1:1.00] +; ATOM-NEXT: shrl $7, %edi # sched: [1:1.00] +; ATOM-NEXT: sarl $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shll $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrl $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: sarl %cl, %edi # sched: [1:1.00] +; ATOM-NEXT: shll %cl, %edi # sched: [1:1.00] +; ATOM-NEXT: shrl %cl, %edi # sched: [1:1.00] +; ATOM-NEXT: sarl %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shll %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrl %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sbb_32: +; SLM-LABEL: test_sar_shl_shr_32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; SLM-NEXT: # sched: [4:2.00] -; SLM-NEXT: sbbl $7, %edi # sched: [1:0.50] -; SLM-NEXT: sbbl $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: sbbl %edi, %edi # sched: [1:0.50] -; SLM-NEXT: sbbl %edi, (%rsi) # sched: [4:2.00] -; SLM-NEXT: sbbl (%rsi), %edi # sched: [4:1.00] +; SLM-NEXT: sarl %edi # sched: [1:1.00] +; SLM-NEXT: shll %edi # sched: [1:1.00] +; SLM-NEXT: shrl %edi # sched: [1:1.00] +; SLM-NEXT: sarl (%rdx) # sched: [4:2.00] +; SLM-NEXT: shll (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrl (%rdx) # sched: [4:2.00] +; SLM-NEXT: sarl $7, %edi # sched: [1:1.00] +; SLM-NEXT: shll $7, %edi # sched: [1:1.00] +; SLM-NEXT: shrl $7, %edi # sched: [1:1.00] +; SLM-NEXT: sarl $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shll $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrl $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: sarl %cl, %edi # sched: [1:1.00] +; SLM-NEXT: shll %cl, %edi # sched: [1:1.00] +; SLM-NEXT: shrl %cl, %edi # sched: [1:1.00] +; SLM-NEXT: sarl %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shll %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrl %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sbb_32: +; SANDY-LABEL: test_sar_shl_shr_32: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; SANDY-NEXT: # sched: [2:0.67] -; SANDY-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; SANDY-NEXT: # sched: [9:1.00] -; SANDY-NEXT: sbbl $7, %edi # sched: [2:0.67] -; SANDY-NEXT: sbbl $7, (%rsi) # sched: [9:1.00] -; SANDY-NEXT: sbbl %edi, %edi # sched: [2:0.67] -; SANDY-NEXT: sbbl %edi, (%rsi) # sched: [9:1.00] -; SANDY-NEXT: sbbl (%rsi), %edi # sched: [7:0.67] +; SANDY-NEXT: sarl %edi # sched: [1:0.50] +; SANDY-NEXT: shll %edi # sched: [1:0.50] +; SANDY-NEXT: shrl %edi # sched: [1:0.50] +; SANDY-NEXT: sarl (%rdx) # sched: [5:1.00] +; SANDY-NEXT: shll (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shrl (%rdx) # sched: [5:1.00] +; SANDY-NEXT: sarl $7, %edi # sched: [1:0.50] +; SANDY-NEXT: shll $7, %edi # sched: [1:0.50] +; SANDY-NEXT: shrl $7, %edi # sched: [1:0.50] +; SANDY-NEXT: sarl $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shll $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shrl $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: sarl %cl, %edi # sched: [3:1.50] +; SANDY-NEXT: shll %cl, %edi # sched: [3:1.50] +; SANDY-NEXT: shrl %cl, %edi # sched: [3:1.50] +; SANDY-NEXT: sarl %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: shll %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: shrl %cl, (%rdx) # sched: [9:1.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sbb_32: +; HASWELL-LABEL: test_sar_shl_shr_32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [2:0.50] -; HASWELL-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [9:1.00] -; HASWELL-NEXT: sbbl $7, %edi # sched: [2:0.50] -; HASWELL-NEXT: sbbl $7, (%rsi) # sched: [9:1.00] -; HASWELL-NEXT: sbbl %edi, %edi # sched: [2:0.50] -; HASWELL-NEXT: sbbl %edi, (%rsi) # sched: [9:1.00] -; HASWELL-NEXT: sbbl (%rsi), %edi # sched: [7:0.50] +; HASWELL-NEXT: sarl %edi # sched: [1:0.50] +; HASWELL-NEXT: shll %edi # sched: [1:0.50] +; HASWELL-NEXT: shrl %edi # sched: [1:0.50] +; HASWELL-NEXT: sarl (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shll (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shrl (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: sarl $7, %edi # sched: [1:0.50] +; HASWELL-NEXT: shll $7, %edi # sched: [1:0.50] +; HASWELL-NEXT: shrl $7, %edi # sched: [1:0.50] +; HASWELL-NEXT: sarl $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shll $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shrl $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: sarl %cl, %edi # sched: [3:1.00] +; HASWELL-NEXT: shll %cl, %edi # sched: [3:1.00] +; HASWELL-NEXT: shrl %cl, %edi # sched: [3:1.00] +; HASWELL-NEXT: sarl %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: shll %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: shrl %cl, (%rdx) # sched: [9:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sbb_32: +; BROADWELL-LABEL: test_sar_shl_shr_32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [1:0.50] -; BROADWELL-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [8:1.00] -; BROADWELL-NEXT: sbbl $7, %edi # sched: [1:0.50] -; BROADWELL-NEXT: sbbl $7, (%rsi) # sched: [8:1.00] -; BROADWELL-NEXT: sbbl %edi, %edi # sched: [1:0.50] -; BROADWELL-NEXT: sbbl %edi, (%rsi) # sched: [8:1.00] -; BROADWELL-NEXT: sbbl (%rsi), %edi # sched: [6:0.50] +; BROADWELL-NEXT: sarl %edi # sched: [1:0.50] +; BROADWELL-NEXT: shll %edi # sched: [1:0.50] +; BROADWELL-NEXT: shrl %edi # sched: [1:0.50] +; BROADWELL-NEXT: sarl (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shll (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shrl (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: sarl $7, %edi # sched: [1:0.50] +; BROADWELL-NEXT: shll $7, %edi # sched: [1:0.50] +; BROADWELL-NEXT: shrl $7, %edi # sched: [1:0.50] +; BROADWELL-NEXT: sarl $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shll $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shrl $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: sarl %cl, %edi # sched: [3:1.00] +; BROADWELL-NEXT: shll %cl, %edi # sched: [3:1.00] +; BROADWELL-NEXT: shrl %cl, %edi # sched: [3:1.00] +; BROADWELL-NEXT: sarl %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: shll %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: shrl %cl, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sbb_32: +; SKYLAKE-LABEL: test_sar_shl_shr_32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [1:0.50] -; SKYLAKE-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [8:1.00] -; SKYLAKE-NEXT: sbbl $7, %edi # sched: [1:0.50] -; SKYLAKE-NEXT: sbbl $7, (%rsi) # sched: [8:1.00] -; SKYLAKE-NEXT: sbbl %edi, %edi # sched: [1:0.50] -; SKYLAKE-NEXT: sbbl %edi, (%rsi) # sched: [8:1.00] -; SKYLAKE-NEXT: sbbl (%rsi), %edi # sched: [6:0.50] -; SKYLAKE-NEXT: #NO_APP -; SKYLAKE-NEXT: retq # sched: [7:1.00] -; -; SKX-LABEL: test_sbb_32: +; SKYLAKE-NEXT: sarl %edi # sched: [1:0.50] +; SKYLAKE-NEXT: shll %edi # sched: [1:0.50] +; SKYLAKE-NEXT: shrl %edi # sched: [1:0.50] +; SKYLAKE-NEXT: sarl (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shll (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shrl (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: sarl $7, %edi # sched: [1:0.50] +; SKYLAKE-NEXT: shll $7, %edi # sched: [1:0.50] +; SKYLAKE-NEXT: shrl $7, %edi # sched: [1:0.50] +; SKYLAKE-NEXT: sarl $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shll $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shrl $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: sarl %cl, %edi # sched: [3:1.50] +; SKYLAKE-NEXT: shll %cl, %edi # sched: [3:1.50] +; SKYLAKE-NEXT: shrl %cl, %edi # sched: [3:1.50] +; SKYLAKE-NEXT: sarl %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: shll %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: shrl %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_sar_shl_shr_32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; SKX-NEXT: # sched: [1:0.50] -; SKX-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; SKX-NEXT: # sched: [8:1.00] -; SKX-NEXT: sbbl $7, %edi # sched: [1:0.50] -; SKX-NEXT: sbbl $7, (%rsi) # sched: [8:1.00] -; SKX-NEXT: sbbl %edi, %edi # sched: [1:0.50] -; SKX-NEXT: sbbl %edi, (%rsi) # sched: [8:1.00] -; SKX-NEXT: sbbl (%rsi), %edi # sched: [6:0.50] +; SKX-NEXT: sarl %edi # sched: [1:0.50] +; SKX-NEXT: shll %edi # sched: [1:0.50] +; SKX-NEXT: shrl %edi # sched: [1:0.50] +; SKX-NEXT: sarl (%rdx) # sched: [6:1.00] +; SKX-NEXT: shll (%rdx) # sched: [6:1.00] +; SKX-NEXT: shrl (%rdx) # sched: [6:1.00] +; SKX-NEXT: sarl $7, %edi # sched: [1:0.50] +; SKX-NEXT: shll $7, %edi # sched: [1:0.50] +; SKX-NEXT: shrl $7, %edi # sched: [1:0.50] +; SKX-NEXT: sarl $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: shll $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: shrl $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: sarl %cl, %edi # sched: [3:1.50] +; SKX-NEXT: shll %cl, %edi # sched: [3:1.50] +; SKX-NEXT: shrl %cl, %edi # sched: [3:1.50] +; SKX-NEXT: sarl %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: shll %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: shrl %cl, (%rdx) # sched: [8:1.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sbb_32: +; BTVER2-LABEL: test_sar_shl_shr_32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [4:1.00] -; BTVER2-NEXT: sbbl $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: sbbl $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: sbbl %edi, %edi # sched: [1:0.50] -; BTVER2-NEXT: sbbl %edi, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: sbbl (%rsi), %edi # sched: [4:1.00] +; BTVER2-NEXT: sarl %edi # sched: [1:0.50] +; BTVER2-NEXT: shll %edi # sched: [1:0.50] +; BTVER2-NEXT: shrl %edi # sched: [1:0.50] +; BTVER2-NEXT: sarl (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shll (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrl (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: sarl $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: shll $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: shrl $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: sarl $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shll $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrl $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: sarl %cl, %edi # sched: [1:0.50] +; BTVER2-NEXT: shll %cl, %edi # sched: [1:0.50] +; BTVER2-NEXT: shrl %cl, %edi # sched: [1:0.50] +; BTVER2-NEXT: sarl %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shll %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrl %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sbb_32: +; ZNVER1-LABEL: test_sar_shl_shr_32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: sbbl $665536, %eax # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: sbbl $665536, %edi # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [5:0.50] -; ZNVER1-NEXT: sbbl $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: sbbl $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: sbbl %edi, %edi # sched: [1:0.25] -; ZNVER1-NEXT: sbbl %edi, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: sbbl (%rsi), %edi # sched: [5:0.50] +; ZNVER1-NEXT: sarl %edi # sched: [1:0.25] +; ZNVER1-NEXT: shll %edi # sched: [1:0.25] +; ZNVER1-NEXT: shrl %edi # sched: [1:0.25] +; ZNVER1-NEXT: sarl (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shll (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrl (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: sarl $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: shll $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: shrl $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: sarl $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shll $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrl $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: sarl %cl, %edi # sched: [1:0.25] +; ZNVER1-NEXT: shll %cl, %edi # sched: [1:0.25] +; ZNVER1-NEXT: shrl %cl, %edi # sched: [1:0.25] +; ZNVER1-NEXT: sarl %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: shll %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: shrl %cl, (%rdx) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "sbbl $2, %EAX \0A\09 sbbl $2, $0 \0A\09 sbbl $2, $1 \0A\09 sbbl $3, $0 \0A\09 sbbl $3, $1 \0A\09 sbbl $0, $0 \0A\09 sbbl $0, $1 \0A\09 sbbl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind + call void asm sideeffect "sarl $0 \0A\09 shll $0 \0A\09 shrl $0 \0A\09 sarl $2 \0A\09 shll $2 \0A\09 shrl $2 \0A\09 sarl $3, $0 \0A\09 shll $3, $0 \0A\09 shrl $3, $0 \0A\09 sarl $3, $2 \0A\09 shll $3, $2 \0A\09 shrl $3, $2 \0A\09 sarl %CL, $0 \0A\09 shll %CL, $0 \0A\09 shrl %CL, $0 \0A\09 sarl %CL, $2 \0A\09 shll %CL, $2 \0A\09 shrl %CL, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7) ret void } -define void @test_sbb_64(i64 %a0, i64* %a1) optsize { -; GENERIC-LABEL: test_sbb_64: +define void @test_sar_shl_shr_64(i64 %a0, i64 %a1, i64 *%a2) optsize { +; GENERIC-LABEL: test_sar_shl_shr_64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [2:0.67] -; GENERIC-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [9:1.00] -; GENERIC-NEXT: sbbq $7, %rdi # sched: [2:0.67] -; GENERIC-NEXT: sbbq $7, (%rsi) # sched: [9:1.00] -; GENERIC-NEXT: sbbq %rdi, %rdi # sched: [2:0.67] -; GENERIC-NEXT: sbbq %rdi, (%rsi) # sched: [9:1.00] -; GENERIC-NEXT: sbbq (%rsi), %rdi # sched: [7:0.67] +; GENERIC-NEXT: sarq %rdi # sched: [1:0.50] +; GENERIC-NEXT: shlq %rdi # sched: [1:0.50] +; GENERIC-NEXT: shrq %rdi # sched: [1:0.50] +; GENERIC-NEXT: sarq (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: shlq (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shrq (%rdx) # sched: [5:1.00] +; GENERIC-NEXT: sarq $7, %rdi # sched: [1:0.50] +; GENERIC-NEXT: shlq $7, %rdi # sched: [1:0.50] +; GENERIC-NEXT: shrq $7, %rdi # sched: [1:0.50] +; GENERIC-NEXT: sarq $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shlq $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: shrq $7, (%rdx) # sched: [7:1.00] +; GENERIC-NEXT: sarq %cl, %rdi # sched: [3:1.50] +; GENERIC-NEXT: shlq %cl, %rdi # sched: [3:1.50] +; GENERIC-NEXT: shrq %cl, %rdi # sched: [3:1.50] +; GENERIC-NEXT: sarq %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: shlq %cl, (%rdx) # sched: [9:1.50] +; GENERIC-NEXT: shrq %cl, (%rdx) # sched: [9:1.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sbb_64: +; ATOM-LABEL: test_sar_shl_shr_64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; ATOM-NEXT: # sched: [1:1.00] -; ATOM-NEXT: sbbq $7, %rdi # sched: [1:0.50] -; ATOM-NEXT: sbbq $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] -; ATOM-NEXT: sbbq %rdi, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: sbbq (%rsi), %rdi # sched: [1:1.00] +; ATOM-NEXT: sarq %rdi # sched: [1:1.00] +; ATOM-NEXT: shlq %rdi # sched: [1:1.00] +; ATOM-NEXT: shrq %rdi # sched: [1:1.00] +; ATOM-NEXT: sarq (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shlq (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrq (%rdx) # sched: [1:1.00] +; ATOM-NEXT: sarq $7, %rdi # sched: [1:1.00] +; ATOM-NEXT: shlq $7, %rdi # sched: [1:1.00] +; ATOM-NEXT: shrq $7, %rdi # sched: [1:1.00] +; ATOM-NEXT: sarq $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shlq $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrq $7, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: sarq %cl, %rdi # sched: [1:1.00] +; ATOM-NEXT: shlq %cl, %rdi # sched: [1:1.00] +; ATOM-NEXT: shrq %cl, %rdi # sched: [1:1.00] +; ATOM-NEXT: sarq %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shlq %cl, (%rdx) # sched: [1:1.00] +; ATOM-NEXT: shrq %cl, (%rdx) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sbb_64: +; SLM-LABEL: test_sar_shl_shr_64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; SLM-NEXT: # sched: [4:2.00] -; SLM-NEXT: sbbq $7, %rdi # sched: [1:0.50] -; SLM-NEXT: sbbq $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] -; SLM-NEXT: sbbq %rdi, (%rsi) # sched: [4:2.00] -; SLM-NEXT: sbbq (%rsi), %rdi # sched: [4:1.00] +; SLM-NEXT: sarq %rdi # sched: [1:1.00] +; SLM-NEXT: shlq %rdi # sched: [1:1.00] +; SLM-NEXT: shrq %rdi # sched: [1:1.00] +; SLM-NEXT: sarq (%rdx) # sched: [4:2.00] +; SLM-NEXT: shlq (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrq (%rdx) # sched: [4:2.00] +; SLM-NEXT: sarq $7, %rdi # sched: [1:1.00] +; SLM-NEXT: shlq $7, %rdi # sched: [1:1.00] +; SLM-NEXT: shrq $7, %rdi # sched: [1:1.00] +; SLM-NEXT: sarq $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shlq $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrq $7, (%rdx) # sched: [4:2.00] +; SLM-NEXT: sarq %cl, %rdi # sched: [1:1.00] +; SLM-NEXT: shlq %cl, %rdi # sched: [1:1.00] +; SLM-NEXT: shrq %cl, %rdi # sched: [1:1.00] +; SLM-NEXT: sarq %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shlq %cl, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrq %cl, (%rdx) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sbb_64: +; SANDY-LABEL: test_sar_shl_shr_64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; SANDY-NEXT: # sched: [2:0.67] -; SANDY-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; SANDY-NEXT: # sched: [9:1.00] -; SANDY-NEXT: sbbq $7, %rdi # sched: [2:0.67] -; SANDY-NEXT: sbbq $7, (%rsi) # sched: [9:1.00] -; SANDY-NEXT: sbbq %rdi, %rdi # sched: [2:0.67] -; SANDY-NEXT: sbbq %rdi, (%rsi) # sched: [9:1.00] -; SANDY-NEXT: sbbq (%rsi), %rdi # sched: [7:0.67] +; SANDY-NEXT: sarq %rdi # sched: [1:0.50] +; SANDY-NEXT: shlq %rdi # sched: [1:0.50] +; SANDY-NEXT: shrq %rdi # sched: [1:0.50] +; SANDY-NEXT: sarq (%rdx) # sched: [5:1.00] +; SANDY-NEXT: shlq (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shrq (%rdx) # sched: [5:1.00] +; SANDY-NEXT: sarq $7, %rdi # sched: [1:0.50] +; SANDY-NEXT: shlq $7, %rdi # sched: [1:0.50] +; SANDY-NEXT: shrq $7, %rdi # sched: [1:0.50] +; SANDY-NEXT: sarq $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shlq $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: shrq $7, (%rdx) # sched: [7:1.00] +; SANDY-NEXT: sarq %cl, %rdi # sched: [3:1.50] +; SANDY-NEXT: shlq %cl, %rdi # sched: [3:1.50] +; SANDY-NEXT: shrq %cl, %rdi # sched: [3:1.50] +; SANDY-NEXT: sarq %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: shlq %cl, (%rdx) # sched: [9:1.50] +; SANDY-NEXT: shrq %cl, (%rdx) # sched: [9:1.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sbb_64: +; HASWELL-LABEL: test_sar_shl_shr_64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [2:0.50] -; HASWELL-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [9:1.00] -; HASWELL-NEXT: sbbq $7, %rdi # sched: [2:0.50] -; HASWELL-NEXT: sbbq $7, (%rsi) # sched: [9:1.00] -; HASWELL-NEXT: sbbq %rdi, %rdi # sched: [2:0.50] -; HASWELL-NEXT: sbbq %rdi, (%rsi) # sched: [9:1.00] -; HASWELL-NEXT: sbbq (%rsi), %rdi # sched: [7:0.50] -; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: sarq %rdi # sched: [1:0.50] +; HASWELL-NEXT: shlq %rdi # sched: [1:0.50] +; HASWELL-NEXT: shrq %rdi # sched: [1:0.50] +; HASWELL-NEXT: sarq (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shlq (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shrq (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: sarq $7, %rdi # sched: [1:0.50] +; HASWELL-NEXT: shlq $7, %rdi # sched: [1:0.50] +; HASWELL-NEXT: shrq $7, %rdi # sched: [1:0.50] +; HASWELL-NEXT: sarq $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shlq $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: shrq $7, (%rdx) # sched: [7:1.00] +; HASWELL-NEXT: sarq %cl, %rdi # sched: [3:1.00] +; HASWELL-NEXT: shlq %cl, %rdi # sched: [3:1.00] +; HASWELL-NEXT: shrq %cl, %rdi # sched: [3:1.00] +; HASWELL-NEXT: sarq %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: shlq %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: shrq %cl, (%rdx) # sched: [9:1.00] +; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sbb_64: +; BROADWELL-LABEL: test_sar_shl_shr_64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [1:0.50] -; BROADWELL-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; BROADWELL-NEXT: # sched: [8:1.00] -; BROADWELL-NEXT: sbbq $7, %rdi # sched: [1:0.50] -; BROADWELL-NEXT: sbbq $7, (%rsi) # sched: [8:1.00] -; BROADWELL-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] -; BROADWELL-NEXT: sbbq %rdi, (%rsi) # sched: [8:1.00] -; BROADWELL-NEXT: sbbq (%rsi), %rdi # sched: [6:0.50] +; BROADWELL-NEXT: sarq %rdi # sched: [1:0.50] +; BROADWELL-NEXT: shlq %rdi # sched: [1:0.50] +; BROADWELL-NEXT: shrq %rdi # sched: [1:0.50] +; BROADWELL-NEXT: sarq (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shlq (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shrq (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: sarq $7, %rdi # sched: [1:0.50] +; BROADWELL-NEXT: shlq $7, %rdi # sched: [1:0.50] +; BROADWELL-NEXT: shrq $7, %rdi # sched: [1:0.50] +; BROADWELL-NEXT: sarq $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shlq $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: shrq $7, (%rdx) # sched: [6:1.00] +; BROADWELL-NEXT: sarq %cl, %rdi # sched: [3:1.00] +; BROADWELL-NEXT: shlq %cl, %rdi # sched: [3:1.00] +; BROADWELL-NEXT: shrq %cl, %rdi # sched: [3:1.00] +; BROADWELL-NEXT: sarq %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: shlq %cl, (%rdx) # sched: [8:1.00] +; BROADWELL-NEXT: shrq %cl, (%rdx) # sched: [8:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sbb_64: +; SKYLAKE-LABEL: test_sar_shl_shr_64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [1:0.50] -; SKYLAKE-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; SKYLAKE-NEXT: # sched: [8:1.00] -; SKYLAKE-NEXT: sbbq $7, %rdi # sched: [1:0.50] -; SKYLAKE-NEXT: sbbq $7, (%rsi) # sched: [8:1.00] -; SKYLAKE-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] -; SKYLAKE-NEXT: sbbq %rdi, (%rsi) # sched: [8:1.00] -; SKYLAKE-NEXT: sbbq (%rsi), %rdi # sched: [6:0.50] +; SKYLAKE-NEXT: sarq %rdi # sched: [1:0.50] +; SKYLAKE-NEXT: shlq %rdi # sched: [1:0.50] +; SKYLAKE-NEXT: shrq %rdi # sched: [1:0.50] +; SKYLAKE-NEXT: sarq (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shlq (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shrq (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: sarq $7, %rdi # sched: [1:0.50] +; SKYLAKE-NEXT: shlq $7, %rdi # sched: [1:0.50] +; SKYLAKE-NEXT: shrq $7, %rdi # sched: [1:0.50] +; SKYLAKE-NEXT: sarq $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shlq $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: shrq $7, (%rdx) # sched: [6:1.00] +; SKYLAKE-NEXT: sarq %cl, %rdi # sched: [3:1.50] +; SKYLAKE-NEXT: shlq %cl, %rdi # sched: [3:1.50] +; SKYLAKE-NEXT: shrq %cl, %rdi # sched: [3:1.50] +; SKYLAKE-NEXT: sarq %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: shlq %cl, (%rdx) # sched: [8:1.50] +; SKYLAKE-NEXT: shrq %cl, (%rdx) # sched: [8:1.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sbb_64: +; SKX-LABEL: test_sar_shl_shr_64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; SKX-NEXT: # sched: [1:0.50] -; SKX-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; SKX-NEXT: # sched: [8:1.00] -; SKX-NEXT: sbbq $7, %rdi # sched: [1:0.50] -; SKX-NEXT: sbbq $7, (%rsi) # sched: [8:1.00] -; SKX-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] -; SKX-NEXT: sbbq %rdi, (%rsi) # sched: [8:1.00] -; SKX-NEXT: sbbq (%rsi), %rdi # sched: [6:0.50] +; SKX-NEXT: sarq %rdi # sched: [1:0.50] +; SKX-NEXT: shlq %rdi # sched: [1:0.50] +; SKX-NEXT: shrq %rdi # sched: [1:0.50] +; SKX-NEXT: sarq (%rdx) # sched: [6:1.00] +; SKX-NEXT: shlq (%rdx) # sched: [6:1.00] +; SKX-NEXT: shrq (%rdx) # sched: [6:1.00] +; SKX-NEXT: sarq $7, %rdi # sched: [1:0.50] +; SKX-NEXT: shlq $7, %rdi # sched: [1:0.50] +; SKX-NEXT: shrq $7, %rdi # sched: [1:0.50] +; SKX-NEXT: sarq $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: shlq $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: shrq $7, (%rdx) # sched: [6:1.00] +; SKX-NEXT: sarq %cl, %rdi # sched: [3:1.50] +; SKX-NEXT: shlq %cl, %rdi # sched: [3:1.50] +; SKX-NEXT: shrq %cl, %rdi # sched: [3:1.50] +; SKX-NEXT: sarq %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: shlq %cl, (%rdx) # sched: [8:1.50] +; SKX-NEXT: shrq %cl, (%rdx) # sched: [8:1.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sbb_64: +; BTVER2-LABEL: test_sar_shl_shr_64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; BTVER2-NEXT: # sched: [4:1.00] -; BTVER2-NEXT: sbbq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: sbbq $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] -; BTVER2-NEXT: sbbq %rdi, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: sbbq (%rsi), %rdi # sched: [4:1.00] +; BTVER2-NEXT: sarq %rdi # sched: [1:0.50] +; BTVER2-NEXT: shlq %rdi # sched: [1:0.50] +; BTVER2-NEXT: shrq %rdi # sched: [1:0.50] +; BTVER2-NEXT: sarq (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shlq (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrq (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: sarq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: shlq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: shrq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: sarq $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shlq $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrq $7, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: sarq %cl, %rdi # sched: [1:0.50] +; BTVER2-NEXT: shlq %cl, %rdi # sched: [1:0.50] +; BTVER2-NEXT: shrq %cl, %rdi # sched: [1:0.50] +; BTVER2-NEXT: sarq %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shlq %cl, (%rdx) # sched: [4:1.00] +; BTVER2-NEXT: shrq %cl, (%rdx) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sbb_64: +; ZNVER1-LABEL: test_sar_shl_shr_64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: sbbq $665536, %rax # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [5:0.50] -; ZNVER1-NEXT: sbbq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: sbbq $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: sbbq %rdi, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: sbbq %rdi, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: sbbq (%rsi), %rdi # sched: [5:0.50] +; ZNVER1-NEXT: sarq %rdi # sched: [1:0.25] +; ZNVER1-NEXT: shlq %rdi # sched: [1:0.25] +; ZNVER1-NEXT: shrq %rdi # sched: [1:0.25] +; ZNVER1-NEXT: sarq (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shlq (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrq (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: sarq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: shlq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: shrq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: sarq $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shlq $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrq $7, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: sarq %cl, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: shlq %cl, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: shrq %cl, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: sarq %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: shlq %cl, (%rdx) # sched: [5:1.00] +; ZNVER1-NEXT: shrq %cl, (%rdx) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "sbbq $2, %RAX \0A\09 sbbq $2, $0 \0A\09 sbbq $2, $1 \0A\09 sbbq $3, $0 \0A\09 sbbq $3, $1 \0A\09 sbbq $0, $0 \0A\09 sbbq $0, $1 \0A\09 sbbq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind + call void asm sideeffect "sarq $0 \0A\09 shlq $0 \0A\09 shrq $0 \0A\09 sarq $2 \0A\09 shlq $2 \0A\09 shrq $2 \0A\09 sarq $3, $0 \0A\09 shlq $3, $0 \0A\09 shrq $3, $0 \0A\09 sarq $3, $2 \0A\09 shlq $3, $2 \0A\09 shrq $3, $2 \0A\09 sarq %CL, $0 \0A\09 shlq %CL, $0 \0A\09 shrq %CL, $0 \0A\09 sarq %CL, $2 \0A\09 shlq %CL, $2 \0A\09 shrq %CL, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7) ret void } -define void @test_scas() optsize { -; GENERIC-LABEL: test_scas: +define void @test_sbb_8(i8 %a0, i8* %a1) optsize { +; GENERIC-LABEL: test_sbb_8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: scasb %es:(%rdi), %al # sched: [2:0.67] -; GENERIC-NEXT: scasw %es:(%rdi), %ax # sched: [2:0.67] -; GENERIC-NEXT: scasl %es:(%rdi), %eax # sched: [2:0.67] -; GENERIC-NEXT: scasq %es:(%rdi), %rax # sched: [2:0.67] +; GENERIC-NEXT: sbbb $7, %al # sched: [3:1.00] +; GENERIC-NEXT: sbbb $7, %dil # sched: [2:0.67] +; GENERIC-NEXT: sbbb $7, (%rsi) # sched: [9:1.00] +; GENERIC-NEXT: sbbb %dil, %dil # sched: [2:0.67] +; GENERIC-NEXT: sbbb %dil, (%rsi) # sched: [9:1.00] +; GENERIC-NEXT: sbbb (%rsi), %dil # sched: [7:0.67] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_scas: +; ATOM-LABEL: test_sbb_8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: scasb %es:(%rdi), %al # sched: [2:1.00] -; ATOM-NEXT: scasw %es:(%rdi), %ax # sched: [2:1.00] -; ATOM-NEXT: scasl %es:(%rdi), %eax # sched: [2:1.00] -; ATOM-NEXT: scasq %es:(%rdi), %rax # sched: [2:1.00] +; ATOM-NEXT: sbbb $7, %al # sched: [1:0.50] +; ATOM-NEXT: sbbb $7, %dil # sched: [1:0.50] +; ATOM-NEXT: sbbb $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: sbbb %dil, %dil # sched: [1:0.50] +; ATOM-NEXT: sbbb %dil, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: sbbb (%rsi), %dil # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_scas: +; SLM-LABEL: test_sbb_8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: scasb %es:(%rdi), %al # sched: [100:1.00] -; SLM-NEXT: scasw %es:(%rdi), %ax # sched: [100:1.00] -; SLM-NEXT: scasl %es:(%rdi), %eax # sched: [100:1.00] -; SLM-NEXT: scasq %es:(%rdi), %rax # sched: [100:1.00] +; SLM-NEXT: sbbb $7, %al # sched: [1:0.50] +; SLM-NEXT: sbbb $7, %dil # sched: [1:0.50] +; SLM-NEXT: sbbb $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: sbbb %dil, %dil # sched: [1:0.50] +; SLM-NEXT: sbbb %dil, (%rsi) # sched: [4:2.00] +; SLM-NEXT: sbbb (%rsi), %dil # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_scas: +; SANDY-LABEL: test_sbb_8: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: scasb %es:(%rdi), %al # sched: [2:0.67] -; SANDY-NEXT: scasw %es:(%rdi), %ax # sched: [2:0.67] -; SANDY-NEXT: scasl %es:(%rdi), %eax # sched: [2:0.67] -; SANDY-NEXT: scasq %es:(%rdi), %rax # sched: [2:0.67] +; SANDY-NEXT: sbbb $7, %al # sched: [3:1.00] +; SANDY-NEXT: sbbb $7, %dil # sched: [2:0.67] +; SANDY-NEXT: sbbb $7, (%rsi) # sched: [9:1.00] +; SANDY-NEXT: sbbb %dil, %dil # sched: [2:0.67] +; SANDY-NEXT: sbbb %dil, (%rsi) # sched: [9:1.00] +; SANDY-NEXT: sbbb (%rsi), %dil # sched: [7:0.67] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_scas: +; HASWELL-LABEL: test_sbb_8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: scasb %es:(%rdi), %al # sched: [7:0.50] -; HASWELL-NEXT: scasw %es:(%rdi), %ax # sched: [7:0.50] -; HASWELL-NEXT: scasl %es:(%rdi), %eax # sched: [7:0.50] -; HASWELL-NEXT: scasq %es:(%rdi), %rax # sched: [7:0.50] +; HASWELL-NEXT: sbbb $7, %al # sched: [2:0.50] +; HASWELL-NEXT: sbbb $7, %dil # sched: [2:0.50] +; HASWELL-NEXT: sbbb $7, (%rsi) # sched: [9:1.00] +; HASWELL-NEXT: sbbb %dil, %dil # sched: [2:0.50] +; HASWELL-NEXT: sbbb %dil, (%rsi) # sched: [9:1.00] +; HASWELL-NEXT: sbbb (%rsi), %dil # sched: [7:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_scas: +; BROADWELL-LABEL: test_sbb_8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: scasb %es:(%rdi), %al # sched: [7:0.50] -; BROADWELL-NEXT: scasw %es:(%rdi), %ax # sched: [7:0.50] -; BROADWELL-NEXT: scasl %es:(%rdi), %eax # sched: [7:0.50] -; BROADWELL-NEXT: scasq %es:(%rdi), %rax # sched: [7:0.50] +; BROADWELL-NEXT: sbbb $7, %al # sched: [2:0.50] +; BROADWELL-NEXT: sbbb $7, %dil # sched: [2:0.50] +; BROADWELL-NEXT: sbbb $7, (%rsi) # sched: [8:1.00] +; BROADWELL-NEXT: sbbb %dil, %dil # sched: [1:0.50] +; BROADWELL-NEXT: sbbb %dil, (%rsi) # sched: [8:1.00] +; BROADWELL-NEXT: sbbb (%rsi), %dil # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_scas: +; SKYLAKE-LABEL: test_sbb_8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: scasb %es:(%rdi), %al # sched: [7:0.50] -; SKYLAKE-NEXT: scasw %es:(%rdi), %ax # sched: [7:0.50] -; SKYLAKE-NEXT: scasl %es:(%rdi), %eax # sched: [7:0.50] -; SKYLAKE-NEXT: scasq %es:(%rdi), %rax # sched: [7:0.50] +; SKYLAKE-NEXT: sbbb $7, %al # sched: [2:0.50] +; SKYLAKE-NEXT: sbbb $7, %dil # sched: [2:0.50] +; SKYLAKE-NEXT: sbbb $7, (%rsi) # sched: [8:1.00] +; SKYLAKE-NEXT: sbbb %dil, %dil # sched: [1:0.50] +; SKYLAKE-NEXT: sbbb %dil, (%rsi) # sched: [8:1.00] +; SKYLAKE-NEXT: sbbb (%rsi), %dil # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_scas: +; SKX-LABEL: test_sbb_8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: scasb %es:(%rdi), %al # sched: [7:0.50] -; SKX-NEXT: scasw %es:(%rdi), %ax # sched: [7:0.50] -; SKX-NEXT: scasl %es:(%rdi), %eax # sched: [7:0.50] -; SKX-NEXT: scasq %es:(%rdi), %rax # sched: [7:0.50] +; SKX-NEXT: sbbb $7, %al # sched: [2:0.50] +; SKX-NEXT: sbbb $7, %dil # sched: [2:0.50] +; SKX-NEXT: sbbb $7, (%rsi) # sched: [8:1.00] +; SKX-NEXT: sbbb %dil, %dil # sched: [1:0.50] +; SKX-NEXT: sbbb %dil, (%rsi) # sched: [8:1.00] +; SKX-NEXT: sbbb (%rsi), %dil # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_scas: +; BTVER2-LABEL: test_sbb_8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: scasb %es:(%rdi), %al # sched: [100:0.17] -; BTVER2-NEXT: scasw %es:(%rdi), %ax # sched: [100:0.17] -; BTVER2-NEXT: scasl %es:(%rdi), %eax # sched: [100:0.17] -; BTVER2-NEXT: scasq %es:(%rdi), %rax # sched: [100:0.17] +; BTVER2-NEXT: sbbb $7, %al # sched: [1:0.50] +; BTVER2-NEXT: sbbb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: sbbb $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: sbbb %dil, %dil # sched: [1:0.50] +; BTVER2-NEXT: sbbb %dil, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: sbbb (%rsi), %dil # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_scas: +; ZNVER1-LABEL: test_sbb_8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: scasb %es:(%rdi), %al # sched: [100:?] -; ZNVER1-NEXT: scasw %es:(%rdi), %ax # sched: [100:?] -; ZNVER1-NEXT: scasl %es:(%rdi), %eax # sched: [100:?] -; ZNVER1-NEXT: scasq %es:(%rdi), %rax # sched: [100:?] +; ZNVER1-NEXT: sbbb $7, %al # sched: [1:0.25] +; ZNVER1-NEXT: sbbb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: sbbb $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: sbbb %dil, %dil # sched: [1:0.25] +; ZNVER1-NEXT: sbbb %dil, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: sbbb (%rsi), %dil # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "scasb \0A\09 scasw \0A\09 scasl \0A\09 scasq", ""() + tail call void asm "sbbb $2, %AL \0A\09 sbbb $2, $0 \0A\09 sbbb $2, $1 \0A\09 sbbb $0, $0 \0A\09 sbbb $0, $1 \0A\09 sbbb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind ret void } - -define void @test_setcc(i8 %a0, i8 *%a1) optsize { -; GENERIC-LABEL: test_setcc: +define void @test_sbb_16(i16 %a0, i16* %a1) optsize { +; GENERIC-LABEL: test_sbb_16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: seto %dil # sched: [1:0.50] -; GENERIC-NEXT: setno %dil # sched: [1:0.50] -; GENERIC-NEXT: setb %dil # sched: [1:0.50] -; GENERIC-NEXT: setae %dil # sched: [1:0.50] -; GENERIC-NEXT: sete %dil # sched: [1:0.50] -; GENERIC-NEXT: setne %dil # sched: [1:0.50] -; GENERIC-NEXT: setbe %dil # sched: [2:1.00] -; GENERIC-NEXT: seta %dil # sched: [2:1.00] -; GENERIC-NEXT: sets %dil # sched: [1:0.50] -; GENERIC-NEXT: setns %dil # sched: [1:0.50] -; GENERIC-NEXT: setp %dil # sched: [1:0.50] -; GENERIC-NEXT: setnp %dil # sched: [1:0.50] -; GENERIC-NEXT: setl %dil # sched: [1:0.50] -; GENERIC-NEXT: setge %dil # sched: [1:0.50] -; GENERIC-NEXT: setle %dil # sched: [1:0.50] -; GENERIC-NEXT: setg %dil # sched: [1:0.50] -; GENERIC-NEXT: seto (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setno (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setb (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setae (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: sete (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setne (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setbe (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: seta (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: sets (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setns (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setp (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setnp (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setl (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setge (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setle (%rsi) # sched: [5:1.00] -; GENERIC-NEXT: setg (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: sbbw $511, %ax # imm = 0x1FF +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: sbbw $511, %di # imm = 0x1FF +; GENERIC-NEXT: # sched: [2:0.67] +; GENERIC-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; GENERIC-NEXT: # sched: [9:1.00] +; GENERIC-NEXT: sbbw $7, %di # sched: [2:0.67] +; GENERIC-NEXT: sbbw $7, (%rsi) # sched: [9:1.00] +; GENERIC-NEXT: sbbw %di, %di # sched: [2:0.67] +; GENERIC-NEXT: sbbw %di, (%rsi) # sched: [9:1.00] +; GENERIC-NEXT: sbbw (%rsi), %di # sched: [7:0.67] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_setcc: +; ATOM-LABEL: test_sbb_16: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: seto %dil # sched: [1:0.50] -; ATOM-NEXT: setno %dil # sched: [1:0.50] -; ATOM-NEXT: setb %dil # sched: [1:0.50] -; ATOM-NEXT: setae %dil # sched: [1:0.50] -; ATOM-NEXT: sete %dil # sched: [1:0.50] -; ATOM-NEXT: setne %dil # sched: [1:0.50] -; ATOM-NEXT: setbe %dil # sched: [1:0.50] -; ATOM-NEXT: seta %dil # sched: [1:0.50] -; ATOM-NEXT: sets %dil # sched: [1:0.50] -; ATOM-NEXT: setns %dil # sched: [1:0.50] -; ATOM-NEXT: setp %dil # sched: [1:0.50] -; ATOM-NEXT: setnp %dil # sched: [1:0.50] -; ATOM-NEXT: setl %dil # sched: [1:0.50] -; ATOM-NEXT: setge %dil # sched: [1:0.50] -; ATOM-NEXT: setle %dil # sched: [1:0.50] -; ATOM-NEXT: setg %dil # sched: [1:0.50] -; ATOM-NEXT: seto (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setno (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setb (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setae (%rsi) # sched: [2:1.00] -; ATOM-NEXT: sete (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setne (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setbe (%rsi) # sched: [2:1.00] -; ATOM-NEXT: seta (%rsi) # sched: [2:1.00] -; ATOM-NEXT: sets (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setns (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setp (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setnp (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setl (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setge (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setle (%rsi) # sched: [2:1.00] -; ATOM-NEXT: setg (%rsi) # sched: [2:1.00] +; ATOM-NEXT: sbbw $511, %ax # imm = 0x1FF +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: sbbw $511, %di # imm = 0x1FF +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: sbbw $7, %di # sched: [1:0.50] +; ATOM-NEXT: sbbw $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: sbbw %di, %di # sched: [1:0.50] +; ATOM-NEXT: sbbw %di, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: sbbw (%rsi), %di # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_setcc: +; SLM-LABEL: test_sbb_16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: seto %dil # sched: [1:0.50] -; SLM-NEXT: setno %dil # sched: [1:0.50] -; SLM-NEXT: setb %dil # sched: [1:0.50] -; SLM-NEXT: setae %dil # sched: [1:0.50] -; SLM-NEXT: sete %dil # sched: [1:0.50] -; SLM-NEXT: setne %dil # sched: [1:0.50] -; SLM-NEXT: setbe %dil # sched: [1:0.50] -; SLM-NEXT: seta %dil # sched: [1:0.50] -; SLM-NEXT: sets %dil # sched: [1:0.50] -; SLM-NEXT: setns %dil # sched: [1:0.50] -; SLM-NEXT: setp %dil # sched: [1:0.50] -; SLM-NEXT: setnp %dil # sched: [1:0.50] -; SLM-NEXT: setl %dil # sched: [1:0.50] -; SLM-NEXT: setge %dil # sched: [1:0.50] -; SLM-NEXT: setle %dil # sched: [1:0.50] -; SLM-NEXT: setg %dil # sched: [1:0.50] -; SLM-NEXT: seto (%rsi) # sched: [1:1.00] -; SLM-NEXT: setno (%rsi) # sched: [1:1.00] -; SLM-NEXT: setb (%rsi) # sched: [1:1.00] -; SLM-NEXT: setae (%rsi) # sched: [1:1.00] -; SLM-NEXT: sete (%rsi) # sched: [1:1.00] -; SLM-NEXT: setne (%rsi) # sched: [1:1.00] -; SLM-NEXT: setbe (%rsi) # sched: [1:1.00] -; SLM-NEXT: seta (%rsi) # sched: [1:1.00] -; SLM-NEXT: sets (%rsi) # sched: [1:1.00] -; SLM-NEXT: setns (%rsi) # sched: [1:1.00] -; SLM-NEXT: setp (%rsi) # sched: [1:1.00] -; SLM-NEXT: setnp (%rsi) # sched: [1:1.00] -; SLM-NEXT: setl (%rsi) # sched: [1:1.00] -; SLM-NEXT: setge (%rsi) # sched: [1:1.00] -; SLM-NEXT: setle (%rsi) # sched: [1:1.00] -; SLM-NEXT: setg (%rsi) # sched: [1:1.00] +; SLM-NEXT: sbbw $511, %ax # imm = 0x1FF +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: sbbw $511, %di # imm = 0x1FF +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: sbbw $7, %di # sched: [1:0.50] +; SLM-NEXT: sbbw $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: sbbw %di, %di # sched: [1:0.50] +; SLM-NEXT: sbbw %di, (%rsi) # sched: [4:2.00] +; SLM-NEXT: sbbw (%rsi), %di # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_setcc: +; SANDY-LABEL: test_sbb_16: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: seto %dil # sched: [1:0.50] -; SANDY-NEXT: setno %dil # sched: [1:0.50] -; SANDY-NEXT: setb %dil # sched: [1:0.50] -; SANDY-NEXT: setae %dil # sched: [1:0.50] -; SANDY-NEXT: sete %dil # sched: [1:0.50] -; SANDY-NEXT: setne %dil # sched: [1:0.50] -; SANDY-NEXT: setbe %dil # sched: [2:1.00] -; SANDY-NEXT: seta %dil # sched: [2:1.00] -; SANDY-NEXT: sets %dil # sched: [1:0.50] -; SANDY-NEXT: setns %dil # sched: [1:0.50] -; SANDY-NEXT: setp %dil # sched: [1:0.50] -; SANDY-NEXT: setnp %dil # sched: [1:0.50] -; SANDY-NEXT: setl %dil # sched: [1:0.50] -; SANDY-NEXT: setge %dil # sched: [1:0.50] -; SANDY-NEXT: setle %dil # sched: [1:0.50] -; SANDY-NEXT: setg %dil # sched: [1:0.50] -; SANDY-NEXT: seto (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setno (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setb (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setae (%rsi) # sched: [5:1.00] -; SANDY-NEXT: sete (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setne (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setbe (%rsi) # sched: [5:1.00] -; SANDY-NEXT: seta (%rsi) # sched: [5:1.00] -; SANDY-NEXT: sets (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setns (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setp (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setnp (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setl (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setge (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setle (%rsi) # sched: [5:1.00] -; SANDY-NEXT: setg (%rsi) # sched: [5:1.00] +; SANDY-NEXT: sbbw $511, %ax # imm = 0x1FF +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: sbbw $511, %di # imm = 0x1FF +; SANDY-NEXT: # sched: [2:0.67] +; SANDY-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; SANDY-NEXT: # sched: [9:1.00] +; SANDY-NEXT: sbbw $7, %di # sched: [2:0.67] +; SANDY-NEXT: sbbw $7, (%rsi) # sched: [9:1.00] +; SANDY-NEXT: sbbw %di, %di # sched: [2:0.67] +; SANDY-NEXT: sbbw %di, (%rsi) # sched: [9:1.00] +; SANDY-NEXT: sbbw (%rsi), %di # sched: [7:0.67] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_setcc: +; HASWELL-LABEL: test_sbb_16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: seto %dil # sched: [1:0.50] -; HASWELL-NEXT: setno %dil # sched: [1:0.50] -; HASWELL-NEXT: setb %dil # sched: [1:0.50] -; HASWELL-NEXT: setae %dil # sched: [1:0.50] -; HASWELL-NEXT: sete %dil # sched: [1:0.50] -; HASWELL-NEXT: setne %dil # sched: [1:0.50] -; HASWELL-NEXT: setbe %dil # sched: [2:0.50] -; HASWELL-NEXT: seta %dil # sched: [2:0.50] -; HASWELL-NEXT: sets %dil # sched: [1:0.50] -; HASWELL-NEXT: setns %dil # sched: [1:0.50] -; HASWELL-NEXT: setp %dil # sched: [1:0.50] -; HASWELL-NEXT: setnp %dil # sched: [1:0.50] -; HASWELL-NEXT: setl %dil # sched: [1:0.50] -; HASWELL-NEXT: setge %dil # sched: [1:0.50] -; HASWELL-NEXT: setle %dil # sched: [1:0.50] -; HASWELL-NEXT: setg %dil # sched: [1:0.50] -; HASWELL-NEXT: seto (%rsi) # sched: [2:1.00] -; HASWELL-NEXT: setno (%rsi) # sched: [2:1.00] -; HASWELL-NEXT: setb (%rsi) # sched: [2:1.00] -; HASWELL-NEXT: setae (%rsi) # sched: [2:1.00] -; HASWELL-NEXT: sete (%rsi) # sched: [2:1.00] -; HASWELL-NEXT: setne (%rsi) # sched: [2:1.00] -; HASWELL-NEXT: setbe (%rsi) # sched: [3:1.00] -; HASWELL-NEXT: seta (%rsi) # sched: [3:1.00] -; HASWELL-NEXT: sets (%rsi) # sched: [2:1.00] -; HASWELL-NEXT: setns (%rsi) # sched: [2:1.00] -; HASWELL-NEXT: setp (%rsi) # sched: [2:1.00] +; HASWELL-NEXT: sbbw $511, %ax # imm = 0x1FF +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: sbbw $511, %di # imm = 0x1FF +; HASWELL-NEXT: # sched: [2:0.50] +; HASWELL-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; HASWELL-NEXT: # sched: [9:1.00] +; HASWELL-NEXT: sbbw $7, %di # sched: [2:0.50] +; HASWELL-NEXT: sbbw $7, (%rsi) # sched: [9:1.00] +; HASWELL-NEXT: sbbw %di, %di # sched: [2:0.50] +; HASWELL-NEXT: sbbw %di, (%rsi) # sched: [9:1.00] +; HASWELL-NEXT: sbbw (%rsi), %di # sched: [7:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retq # sched: [7:1.00] +; +; BROADWELL-LABEL: test_sbb_16: +; BROADWELL: # %bb.0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: sbbw $511, %ax # imm = 0x1FF +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: sbbw $511, %di # imm = 0x1FF +; BROADWELL-NEXT: # sched: [1:0.50] +; BROADWELL-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; BROADWELL-NEXT: # sched: [8:1.00] +; BROADWELL-NEXT: sbbw $7, %di # sched: [1:0.50] +; BROADWELL-NEXT: sbbw $7, (%rsi) # sched: [8:1.00] +; BROADWELL-NEXT: sbbw %di, %di # sched: [1:0.50] +; BROADWELL-NEXT: sbbw %di, (%rsi) # sched: [8:1.00] +; BROADWELL-NEXT: sbbw (%rsi), %di # sched: [6:0.50] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retq # sched: [7:1.00] +; +; SKYLAKE-LABEL: test_sbb_16: +; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: sbbw $511, %ax # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: sbbw $511, %di # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [1:0.50] +; SKYLAKE-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [8:1.00] +; SKYLAKE-NEXT: sbbw $7, %di # sched: [1:0.50] +; SKYLAKE-NEXT: sbbw $7, (%rsi) # sched: [8:1.00] +; SKYLAKE-NEXT: sbbw %di, %di # sched: [1:0.50] +; SKYLAKE-NEXT: sbbw %di, (%rsi) # sched: [8:1.00] +; SKYLAKE-NEXT: sbbw (%rsi), %di # sched: [6:0.50] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_sbb_16: +; SKX: # %bb.0: +; SKX-NEXT: #APP +; SKX-NEXT: sbbw $511, %ax # imm = 0x1FF +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: sbbw $511, %di # imm = 0x1FF +; SKX-NEXT: # sched: [1:0.50] +; SKX-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; SKX-NEXT: # sched: [8:1.00] +; SKX-NEXT: sbbw $7, %di # sched: [1:0.50] +; SKX-NEXT: sbbw $7, (%rsi) # sched: [8:1.00] +; SKX-NEXT: sbbw %di, %di # sched: [1:0.50] +; SKX-NEXT: sbbw %di, (%rsi) # sched: [8:1.00] +; SKX-NEXT: sbbw (%rsi), %di # sched: [6:0.50] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retq # sched: [7:1.00] +; +; BTVER2-LABEL: test_sbb_16: +; BTVER2: # %bb.0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: sbbw $511, %ax # imm = 0x1FF +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: sbbw $511, %di # imm = 0x1FF +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: sbbw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: sbbw $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: sbbw %di, %di # sched: [1:0.50] +; BTVER2-NEXT: sbbw %di, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: sbbw (%rsi), %di # sched: [4:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retq # sched: [4:1.00] +; +; ZNVER1-LABEL: test_sbb_16: +; ZNVER1: # %bb.0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: sbbw $511, %ax # imm = 0x1FF +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: sbbw $511, %di # imm = 0x1FF +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: sbbw $511, (%rsi) # imm = 0x1FF +; ZNVER1-NEXT: # sched: [5:0.50] +; ZNVER1-NEXT: sbbw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: sbbw $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: sbbw %di, %di # sched: [1:0.25] +; ZNVER1-NEXT: sbbw %di, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: sbbw (%rsi), %di # sched: [5:0.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retq # sched: [1:0.50] + tail call void asm "sbbw $2, %AX \0A\09 sbbw $2, $0 \0A\09 sbbw $2, $1 \0A\09 sbbw $3, $0 \0A\09 sbbw $3, $1 \0A\09 sbbw $0, $0 \0A\09 sbbw $0, $1 \0A\09 sbbw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind + ret void +} +define void @test_sbb_32(i32 %a0, i32* %a1) optsize { +; GENERIC-LABEL: test_sbb_32: +; GENERIC: # %bb.0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [2:0.67] +; GENERIC-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [9:1.00] +; GENERIC-NEXT: sbbl $7, %edi # sched: [2:0.67] +; GENERIC-NEXT: sbbl $7, (%rsi) # sched: [9:1.00] +; GENERIC-NEXT: sbbl %edi, %edi # sched: [2:0.67] +; GENERIC-NEXT: sbbl %edi, (%rsi) # sched: [9:1.00] +; GENERIC-NEXT: sbbl (%rsi), %edi # sched: [7:0.67] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_sbb_32: +; ATOM: # %bb.0: +; ATOM-NEXT: #APP +; ATOM-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: sbbl $7, %edi # sched: [1:0.50] +; ATOM-NEXT: sbbl $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: sbbl %edi, %edi # sched: [1:0.50] +; ATOM-NEXT: sbbl %edi, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: sbbl (%rsi), %edi # sched: [1:1.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retq # sched: [79:39.50] +; +; SLM-LABEL: test_sbb_32: +; SLM: # %bb.0: +; SLM-NEXT: #APP +; SLM-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: sbbl $7, %edi # sched: [1:0.50] +; SLM-NEXT: sbbl $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: sbbl %edi, %edi # sched: [1:0.50] +; SLM-NEXT: sbbl %edi, (%rsi) # sched: [4:2.00] +; SLM-NEXT: sbbl (%rsi), %edi # sched: [4:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_sbb_32: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; SANDY-NEXT: # sched: [2:0.67] +; SANDY-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [9:1.00] +; SANDY-NEXT: sbbl $7, %edi # sched: [2:0.67] +; SANDY-NEXT: sbbl $7, (%rsi) # sched: [9:1.00] +; SANDY-NEXT: sbbl %edi, %edi # sched: [2:0.67] +; SANDY-NEXT: sbbl %edi, (%rsi) # sched: [9:1.00] +; SANDY-NEXT: sbbl (%rsi), %edi # sched: [7:0.67] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retq # sched: [1:1.00] +; +; HASWELL-LABEL: test_sbb_32: +; HASWELL: # %bb.0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [2:0.50] +; HASWELL-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [9:1.00] +; HASWELL-NEXT: sbbl $7, %edi # sched: [2:0.50] +; HASWELL-NEXT: sbbl $7, (%rsi) # sched: [9:1.00] +; HASWELL-NEXT: sbbl %edi, %edi # sched: [2:0.50] +; HASWELL-NEXT: sbbl %edi, (%rsi) # sched: [9:1.00] +; HASWELL-NEXT: sbbl (%rsi), %edi # sched: [7:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retq # sched: [7:1.00] +; +; BROADWELL-LABEL: test_sbb_32: +; BROADWELL: # %bb.0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.50] +; BROADWELL-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [8:1.00] +; BROADWELL-NEXT: sbbl $7, %edi # sched: [1:0.50] +; BROADWELL-NEXT: sbbl $7, (%rsi) # sched: [8:1.00] +; BROADWELL-NEXT: sbbl %edi, %edi # sched: [1:0.50] +; BROADWELL-NEXT: sbbl %edi, (%rsi) # sched: [8:1.00] +; BROADWELL-NEXT: sbbl (%rsi), %edi # sched: [6:0.50] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retq # sched: [7:1.00] +; +; SKYLAKE-LABEL: test_sbb_32: +; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.50] +; SKYLAKE-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [8:1.00] +; SKYLAKE-NEXT: sbbl $7, %edi # sched: [1:0.50] +; SKYLAKE-NEXT: sbbl $7, (%rsi) # sched: [8:1.00] +; SKYLAKE-NEXT: sbbl %edi, %edi # sched: [1:0.50] +; SKYLAKE-NEXT: sbbl %edi, (%rsi) # sched: [8:1.00] +; SKYLAKE-NEXT: sbbl (%rsi), %edi # sched: [6:0.50] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_sbb_32: +; SKX: # %bb.0: +; SKX-NEXT: #APP +; SKX-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.50] +; SKX-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: # sched: [8:1.00] +; SKX-NEXT: sbbl $7, %edi # sched: [1:0.50] +; SKX-NEXT: sbbl $7, (%rsi) # sched: [8:1.00] +; SKX-NEXT: sbbl %edi, %edi # sched: [1:0.50] +; SKX-NEXT: sbbl %edi, (%rsi) # sched: [8:1.00] +; SKX-NEXT: sbbl (%rsi), %edi # sched: [6:0.50] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retq # sched: [7:1.00] +; +; BTVER2-LABEL: test_sbb_32: +; BTVER2: # %bb.0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: sbbl $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: sbbl $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: sbbl %edi, %edi # sched: [1:0.50] +; BTVER2-NEXT: sbbl %edi, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: sbbl (%rsi), %edi # sched: [4:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retq # sched: [4:1.00] +; +; ZNVER1-LABEL: test_sbb_32: +; ZNVER1: # %bb.0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: sbbl $665536, %eax # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: sbbl $665536, %edi # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: sbbl $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:0.50] +; ZNVER1-NEXT: sbbl $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: sbbl $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: sbbl %edi, %edi # sched: [1:0.25] +; ZNVER1-NEXT: sbbl %edi, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: sbbl (%rsi), %edi # sched: [5:0.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retq # sched: [1:0.50] + tail call void asm "sbbl $2, %EAX \0A\09 sbbl $2, $0 \0A\09 sbbl $2, $1 \0A\09 sbbl $3, $0 \0A\09 sbbl $3, $1 \0A\09 sbbl $0, $0 \0A\09 sbbl $0, $1 \0A\09 sbbl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind + ret void +} +define void @test_sbb_64(i64 %a0, i64* %a1) optsize { +; GENERIC-LABEL: test_sbb_64: +; GENERIC: # %bb.0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [2:0.67] +; GENERIC-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [9:1.00] +; GENERIC-NEXT: sbbq $7, %rdi # sched: [2:0.67] +; GENERIC-NEXT: sbbq $7, (%rsi) # sched: [9:1.00] +; GENERIC-NEXT: sbbq %rdi, %rdi # sched: [2:0.67] +; GENERIC-NEXT: sbbq %rdi, (%rsi) # sched: [9:1.00] +; GENERIC-NEXT: sbbq (%rsi), %rdi # sched: [7:0.67] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_sbb_64: +; ATOM: # %bb.0: +; ATOM-NEXT: #APP +; ATOM-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: sbbq $7, %rdi # sched: [1:0.50] +; ATOM-NEXT: sbbq $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] +; ATOM-NEXT: sbbq %rdi, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: sbbq (%rsi), %rdi # sched: [1:1.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retq # sched: [79:39.50] +; +; SLM-LABEL: test_sbb_64: +; SLM: # %bb.0: +; SLM-NEXT: #APP +; SLM-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: sbbq $7, %rdi # sched: [1:0.50] +; SLM-NEXT: sbbq $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] +; SLM-NEXT: sbbq %rdi, (%rsi) # sched: [4:2.00] +; SLM-NEXT: sbbq (%rsi), %rdi # sched: [4:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_sbb_64: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; SANDY-NEXT: # sched: [2:0.67] +; SANDY-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [9:1.00] +; SANDY-NEXT: sbbq $7, %rdi # sched: [2:0.67] +; SANDY-NEXT: sbbq $7, (%rsi) # sched: [9:1.00] +; SANDY-NEXT: sbbq %rdi, %rdi # sched: [2:0.67] +; SANDY-NEXT: sbbq %rdi, (%rsi) # sched: [9:1.00] +; SANDY-NEXT: sbbq (%rsi), %rdi # sched: [7:0.67] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retq # sched: [1:1.00] +; +; HASWELL-LABEL: test_sbb_64: +; HASWELL: # %bb.0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [2:0.50] +; HASWELL-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [9:1.00] +; HASWELL-NEXT: sbbq $7, %rdi # sched: [2:0.50] +; HASWELL-NEXT: sbbq $7, (%rsi) # sched: [9:1.00] +; HASWELL-NEXT: sbbq %rdi, %rdi # sched: [2:0.50] +; HASWELL-NEXT: sbbq %rdi, (%rsi) # sched: [9:1.00] +; HASWELL-NEXT: sbbq (%rsi), %rdi # sched: [7:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retq # sched: [7:1.00] +; +; BROADWELL-LABEL: test_sbb_64: +; BROADWELL: # %bb.0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.50] +; BROADWELL-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [8:1.00] +; BROADWELL-NEXT: sbbq $7, %rdi # sched: [1:0.50] +; BROADWELL-NEXT: sbbq $7, (%rsi) # sched: [8:1.00] +; BROADWELL-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] +; BROADWELL-NEXT: sbbq %rdi, (%rsi) # sched: [8:1.00] +; BROADWELL-NEXT: sbbq (%rsi), %rdi # sched: [6:0.50] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retq # sched: [7:1.00] +; +; SKYLAKE-LABEL: test_sbb_64: +; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.50] +; SKYLAKE-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [8:1.00] +; SKYLAKE-NEXT: sbbq $7, %rdi # sched: [1:0.50] +; SKYLAKE-NEXT: sbbq $7, (%rsi) # sched: [8:1.00] +; SKYLAKE-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] +; SKYLAKE-NEXT: sbbq %rdi, (%rsi) # sched: [8:1.00] +; SKYLAKE-NEXT: sbbq (%rsi), %rdi # sched: [6:0.50] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_sbb_64: +; SKX: # %bb.0: +; SKX-NEXT: #APP +; SKX-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.50] +; SKX-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: # sched: [8:1.00] +; SKX-NEXT: sbbq $7, %rdi # sched: [1:0.50] +; SKX-NEXT: sbbq $7, (%rsi) # sched: [8:1.00] +; SKX-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] +; SKX-NEXT: sbbq %rdi, (%rsi) # sched: [8:1.00] +; SKX-NEXT: sbbq (%rsi), %rdi # sched: [6:0.50] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retq # sched: [7:1.00] +; +; BTVER2-LABEL: test_sbb_64: +; BTVER2: # %bb.0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: sbbq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: sbbq $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: sbbq %rdi, %rdi # sched: [1:0.50] +; BTVER2-NEXT: sbbq %rdi, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: sbbq (%rsi), %rdi # sched: [4:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retq # sched: [4:1.00] +; +; ZNVER1-LABEL: test_sbb_64: +; ZNVER1: # %bb.0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: sbbq $665536, %rax # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: sbbq $665536, %rdi # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: sbbq $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:0.50] +; ZNVER1-NEXT: sbbq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: sbbq $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: sbbq %rdi, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: sbbq %rdi, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: sbbq (%rsi), %rdi # sched: [5:0.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retq # sched: [1:0.50] + tail call void asm "sbbq $2, %RAX \0A\09 sbbq $2, $0 \0A\09 sbbq $2, $1 \0A\09 sbbq $3, $0 \0A\09 sbbq $3, $1 \0A\09 sbbq $0, $0 \0A\09 sbbq $0, $1 \0A\09 sbbq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind + ret void +} + +define void @test_scas() optsize { +; GENERIC-LABEL: test_scas: +; GENERIC: # %bb.0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: scasb %es:(%rdi), %al # sched: [2:0.67] +; GENERIC-NEXT: scasw %es:(%rdi), %ax # sched: [2:0.67] +; GENERIC-NEXT: scasl %es:(%rdi), %eax # sched: [2:0.67] +; GENERIC-NEXT: scasq %es:(%rdi), %rax # sched: [2:0.67] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_scas: +; ATOM: # %bb.0: +; ATOM-NEXT: #APP +; ATOM-NEXT: scasb %es:(%rdi), %al # sched: [2:1.00] +; ATOM-NEXT: scasw %es:(%rdi), %ax # sched: [2:1.00] +; ATOM-NEXT: scasl %es:(%rdi), %eax # sched: [2:1.00] +; ATOM-NEXT: scasq %es:(%rdi), %rax # sched: [2:1.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retq # sched: [79:39.50] +; +; SLM-LABEL: test_scas: +; SLM: # %bb.0: +; SLM-NEXT: #APP +; SLM-NEXT: scasb %es:(%rdi), %al # sched: [100:1.00] +; SLM-NEXT: scasw %es:(%rdi), %ax # sched: [100:1.00] +; SLM-NEXT: scasl %es:(%rdi), %eax # sched: [100:1.00] +; SLM-NEXT: scasq %es:(%rdi), %rax # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_scas: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: scasb %es:(%rdi), %al # sched: [2:0.67] +; SANDY-NEXT: scasw %es:(%rdi), %ax # sched: [2:0.67] +; SANDY-NEXT: scasl %es:(%rdi), %eax # sched: [2:0.67] +; SANDY-NEXT: scasq %es:(%rdi), %rax # sched: [2:0.67] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retq # sched: [1:1.00] +; +; HASWELL-LABEL: test_scas: +; HASWELL: # %bb.0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: scasb %es:(%rdi), %al # sched: [7:0.50] +; HASWELL-NEXT: scasw %es:(%rdi), %ax # sched: [7:0.50] +; HASWELL-NEXT: scasl %es:(%rdi), %eax # sched: [7:0.50] +; HASWELL-NEXT: scasq %es:(%rdi), %rax # sched: [7:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retq # sched: [7:1.00] +; +; BROADWELL-LABEL: test_scas: +; BROADWELL: # %bb.0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: scasb %es:(%rdi), %al # sched: [7:0.50] +; BROADWELL-NEXT: scasw %es:(%rdi), %ax # sched: [7:0.50] +; BROADWELL-NEXT: scasl %es:(%rdi), %eax # sched: [7:0.50] +; BROADWELL-NEXT: scasq %es:(%rdi), %rax # sched: [7:0.50] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retq # sched: [7:1.00] +; +; SKYLAKE-LABEL: test_scas: +; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: scasb %es:(%rdi), %al # sched: [7:0.50] +; SKYLAKE-NEXT: scasw %es:(%rdi), %ax # sched: [7:0.50] +; SKYLAKE-NEXT: scasl %es:(%rdi), %eax # sched: [7:0.50] +; SKYLAKE-NEXT: scasq %es:(%rdi), %rax # sched: [7:0.50] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_scas: +; SKX: # %bb.0: +; SKX-NEXT: #APP +; SKX-NEXT: scasb %es:(%rdi), %al # sched: [7:0.50] +; SKX-NEXT: scasw %es:(%rdi), %ax # sched: [7:0.50] +; SKX-NEXT: scasl %es:(%rdi), %eax # sched: [7:0.50] +; SKX-NEXT: scasq %es:(%rdi), %rax # sched: [7:0.50] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retq # sched: [7:1.00] +; +; BTVER2-LABEL: test_scas: +; BTVER2: # %bb.0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: scasb %es:(%rdi), %al # sched: [100:0.17] +; BTVER2-NEXT: scasw %es:(%rdi), %ax # sched: [100:0.17] +; BTVER2-NEXT: scasl %es:(%rdi), %eax # sched: [100:0.17] +; BTVER2-NEXT: scasq %es:(%rdi), %rax # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retq # sched: [4:1.00] +; +; ZNVER1-LABEL: test_scas: +; ZNVER1: # %bb.0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: scasb %es:(%rdi), %al # sched: [100:?] +; ZNVER1-NEXT: scasw %es:(%rdi), %ax # sched: [100:?] +; ZNVER1-NEXT: scasl %es:(%rdi), %eax # sched: [100:?] +; ZNVER1-NEXT: scasq %es:(%rdi), %rax # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retq # sched: [1:0.50] + call void asm sideeffect "scasb \0A\09 scasw \0A\09 scasl \0A\09 scasq", ""() + ret void +} + +define void @test_setcc(i8 %a0, i8 *%a1) optsize { +; GENERIC-LABEL: test_setcc: +; GENERIC: # %bb.0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: seto %dil # sched: [1:0.50] +; GENERIC-NEXT: setno %dil # sched: [1:0.50] +; GENERIC-NEXT: setb %dil # sched: [1:0.50] +; GENERIC-NEXT: setae %dil # sched: [1:0.50] +; GENERIC-NEXT: sete %dil # sched: [1:0.50] +; GENERIC-NEXT: setne %dil # sched: [1:0.50] +; GENERIC-NEXT: setbe %dil # sched: [2:1.00] +; GENERIC-NEXT: seta %dil # sched: [2:1.00] +; GENERIC-NEXT: sets %dil # sched: [1:0.50] +; GENERIC-NEXT: setns %dil # sched: [1:0.50] +; GENERIC-NEXT: setp %dil # sched: [1:0.50] +; GENERIC-NEXT: setnp %dil # sched: [1:0.50] +; GENERIC-NEXT: setl %dil # sched: [1:0.50] +; GENERIC-NEXT: setge %dil # sched: [1:0.50] +; GENERIC-NEXT: setle %dil # sched: [1:0.50] +; GENERIC-NEXT: setg %dil # sched: [1:0.50] +; GENERIC-NEXT: seto (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setno (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setb (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setae (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: sete (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setne (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setbe (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: seta (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: sets (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setns (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setp (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setnp (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setl (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setge (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setle (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: setg (%rsi) # sched: [5:1.00] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_setcc: +; ATOM: # %bb.0: +; ATOM-NEXT: #APP +; ATOM-NEXT: seto %dil # sched: [1:0.50] +; ATOM-NEXT: setno %dil # sched: [1:0.50] +; ATOM-NEXT: setb %dil # sched: [1:0.50] +; ATOM-NEXT: setae %dil # sched: [1:0.50] +; ATOM-NEXT: sete %dil # sched: [1:0.50] +; ATOM-NEXT: setne %dil # sched: [1:0.50] +; ATOM-NEXT: setbe %dil # sched: [1:0.50] +; ATOM-NEXT: seta %dil # sched: [1:0.50] +; ATOM-NEXT: sets %dil # sched: [1:0.50] +; ATOM-NEXT: setns %dil # sched: [1:0.50] +; ATOM-NEXT: setp %dil # sched: [1:0.50] +; ATOM-NEXT: setnp %dil # sched: [1:0.50] +; ATOM-NEXT: setl %dil # sched: [1:0.50] +; ATOM-NEXT: setge %dil # sched: [1:0.50] +; ATOM-NEXT: setle %dil # sched: [1:0.50] +; ATOM-NEXT: setg %dil # sched: [1:0.50] +; ATOM-NEXT: seto (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setno (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setb (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setae (%rsi) # sched: [2:1.00] +; ATOM-NEXT: sete (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setne (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setbe (%rsi) # sched: [2:1.00] +; ATOM-NEXT: seta (%rsi) # sched: [2:1.00] +; ATOM-NEXT: sets (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setns (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setp (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setnp (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setl (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setge (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setle (%rsi) # sched: [2:1.00] +; ATOM-NEXT: setg (%rsi) # sched: [2:1.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retq # sched: [79:39.50] +; +; SLM-LABEL: test_setcc: +; SLM: # %bb.0: +; SLM-NEXT: #APP +; SLM-NEXT: seto %dil # sched: [1:0.50] +; SLM-NEXT: setno %dil # sched: [1:0.50] +; SLM-NEXT: setb %dil # sched: [1:0.50] +; SLM-NEXT: setae %dil # sched: [1:0.50] +; SLM-NEXT: sete %dil # sched: [1:0.50] +; SLM-NEXT: setne %dil # sched: [1:0.50] +; SLM-NEXT: setbe %dil # sched: [1:0.50] +; SLM-NEXT: seta %dil # sched: [1:0.50] +; SLM-NEXT: sets %dil # sched: [1:0.50] +; SLM-NEXT: setns %dil # sched: [1:0.50] +; SLM-NEXT: setp %dil # sched: [1:0.50] +; SLM-NEXT: setnp %dil # sched: [1:0.50] +; SLM-NEXT: setl %dil # sched: [1:0.50] +; SLM-NEXT: setge %dil # sched: [1:0.50] +; SLM-NEXT: setle %dil # sched: [1:0.50] +; SLM-NEXT: setg %dil # sched: [1:0.50] +; SLM-NEXT: seto (%rsi) # sched: [1:1.00] +; SLM-NEXT: setno (%rsi) # sched: [1:1.00] +; SLM-NEXT: setb (%rsi) # sched: [1:1.00] +; SLM-NEXT: setae (%rsi) # sched: [1:1.00] +; SLM-NEXT: sete (%rsi) # sched: [1:1.00] +; SLM-NEXT: setne (%rsi) # sched: [1:1.00] +; SLM-NEXT: setbe (%rsi) # sched: [1:1.00] +; SLM-NEXT: seta (%rsi) # sched: [1:1.00] +; SLM-NEXT: sets (%rsi) # sched: [1:1.00] +; SLM-NEXT: setns (%rsi) # sched: [1:1.00] +; SLM-NEXT: setp (%rsi) # sched: [1:1.00] +; SLM-NEXT: setnp (%rsi) # sched: [1:1.00] +; SLM-NEXT: setl (%rsi) # sched: [1:1.00] +; SLM-NEXT: setge (%rsi) # sched: [1:1.00] +; SLM-NEXT: setle (%rsi) # sched: [1:1.00] +; SLM-NEXT: setg (%rsi) # sched: [1:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_setcc: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: seto %dil # sched: [1:0.50] +; SANDY-NEXT: setno %dil # sched: [1:0.50] +; SANDY-NEXT: setb %dil # sched: [1:0.50] +; SANDY-NEXT: setae %dil # sched: [1:0.50] +; SANDY-NEXT: sete %dil # sched: [1:0.50] +; SANDY-NEXT: setne %dil # sched: [1:0.50] +; SANDY-NEXT: setbe %dil # sched: [2:1.00] +; SANDY-NEXT: seta %dil # sched: [2:1.00] +; SANDY-NEXT: sets %dil # sched: [1:0.50] +; SANDY-NEXT: setns %dil # sched: [1:0.50] +; SANDY-NEXT: setp %dil # sched: [1:0.50] +; SANDY-NEXT: setnp %dil # sched: [1:0.50] +; SANDY-NEXT: setl %dil # sched: [1:0.50] +; SANDY-NEXT: setge %dil # sched: [1:0.50] +; SANDY-NEXT: setle %dil # sched: [1:0.50] +; SANDY-NEXT: setg %dil # sched: [1:0.50] +; SANDY-NEXT: seto (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setno (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setb (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setae (%rsi) # sched: [5:1.00] +; SANDY-NEXT: sete (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setne (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setbe (%rsi) # sched: [5:1.00] +; SANDY-NEXT: seta (%rsi) # sched: [5:1.00] +; SANDY-NEXT: sets (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setns (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setp (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setnp (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setl (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setge (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setle (%rsi) # sched: [5:1.00] +; SANDY-NEXT: setg (%rsi) # sched: [5:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retq # sched: [1:1.00] +; +; HASWELL-LABEL: test_setcc: +; HASWELL: # %bb.0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: seto %dil # sched: [1:0.50] +; HASWELL-NEXT: setno %dil # sched: [1:0.50] +; HASWELL-NEXT: setb %dil # sched: [1:0.50] +; HASWELL-NEXT: setae %dil # sched: [1:0.50] +; HASWELL-NEXT: sete %dil # sched: [1:0.50] +; HASWELL-NEXT: setne %dil # sched: [1:0.50] +; HASWELL-NEXT: setbe %dil # sched: [2:0.50] +; HASWELL-NEXT: seta %dil # sched: [2:0.50] +; HASWELL-NEXT: sets %dil # sched: [1:0.50] +; HASWELL-NEXT: setns %dil # sched: [1:0.50] +; HASWELL-NEXT: setp %dil # sched: [1:0.50] +; HASWELL-NEXT: setnp %dil # sched: [1:0.50] +; HASWELL-NEXT: setl %dil # sched: [1:0.50] +; HASWELL-NEXT: setge %dil # sched: [1:0.50] +; HASWELL-NEXT: setle %dil # sched: [1:0.50] +; HASWELL-NEXT: setg %dil # sched: [1:0.50] +; HASWELL-NEXT: seto (%rsi) # sched: [2:1.00] +; HASWELL-NEXT: setno (%rsi) # sched: [2:1.00] +; HASWELL-NEXT: setb (%rsi) # sched: [2:1.00] +; HASWELL-NEXT: setae (%rsi) # sched: [2:1.00] +; HASWELL-NEXT: sete (%rsi) # sched: [2:1.00] +; HASWELL-NEXT: setne (%rsi) # sched: [2:1.00] +; HASWELL-NEXT: setbe (%rsi) # sched: [3:1.00] +; HASWELL-NEXT: seta (%rsi) # sched: [3:1.00] +; HASWELL-NEXT: sets (%rsi) # sched: [2:1.00] +; HASWELL-NEXT: setns (%rsi) # sched: [2:1.00] +; HASWELL-NEXT: setp (%rsi) # sched: [2:1.00] ; HASWELL-NEXT: setnp (%rsi) # sched: [2:1.00] ; HASWELL-NEXT: setl (%rsi) # sched: [2:1.00] ; HASWELL-NEXT: setge (%rsi) # sched: [2:1.00] @@ -11010,1462 +11651,2003 @@ define void @test_setcc(i8 %a0, i8 *%a1) optsize { ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_setcc: +; BROADWELL-LABEL: test_setcc: +; BROADWELL: # %bb.0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: seto %dil # sched: [1:0.50] +; BROADWELL-NEXT: setno %dil # sched: [1:0.50] +; BROADWELL-NEXT: setb %dil # sched: [1:0.50] +; BROADWELL-NEXT: setae %dil # sched: [1:0.50] +; BROADWELL-NEXT: sete %dil # sched: [1:0.50] +; BROADWELL-NEXT: setne %dil # sched: [1:0.50] +; BROADWELL-NEXT: setbe %dil # sched: [2:0.50] +; BROADWELL-NEXT: seta %dil # sched: [2:0.50] +; BROADWELL-NEXT: sets %dil # sched: [1:0.50] +; BROADWELL-NEXT: setns %dil # sched: [1:0.50] +; BROADWELL-NEXT: setp %dil # sched: [1:0.50] +; BROADWELL-NEXT: setnp %dil # sched: [1:0.50] +; BROADWELL-NEXT: setl %dil # sched: [1:0.50] +; BROADWELL-NEXT: setge %dil # sched: [1:0.50] +; BROADWELL-NEXT: setle %dil # sched: [1:0.50] +; BROADWELL-NEXT: setg %dil # sched: [1:0.50] +; BROADWELL-NEXT: seto (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setno (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setb (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setae (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: sete (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setne (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setbe (%rsi) # sched: [3:1.00] +; BROADWELL-NEXT: seta (%rsi) # sched: [3:1.00] +; BROADWELL-NEXT: sets (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setns (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setp (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setnp (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setl (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setge (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setle (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: setg (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retq # sched: [7:1.00] +; +; SKYLAKE-LABEL: test_setcc: +; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: seto %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setno %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setb %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setae %dil # sched: [1:0.50] +; SKYLAKE-NEXT: sete %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setne %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setbe %dil # sched: [2:1.00] +; SKYLAKE-NEXT: seta %dil # sched: [2:1.00] +; SKYLAKE-NEXT: sets %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setns %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setp %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setnp %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setl %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setge %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setle %dil # sched: [1:0.50] +; SKYLAKE-NEXT: setg %dil # sched: [1:0.50] +; SKYLAKE-NEXT: seto (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setno (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setb (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setae (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: sete (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setne (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setbe (%rsi) # sched: [3:1.00] +; SKYLAKE-NEXT: seta (%rsi) # sched: [3:1.00] +; SKYLAKE-NEXT: sets (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setns (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setp (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setnp (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setl (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setge (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setle (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: setg (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_setcc: +; SKX: # %bb.0: +; SKX-NEXT: #APP +; SKX-NEXT: seto %dil # sched: [1:0.50] +; SKX-NEXT: setno %dil # sched: [1:0.50] +; SKX-NEXT: setb %dil # sched: [1:0.50] +; SKX-NEXT: setae %dil # sched: [1:0.50] +; SKX-NEXT: sete %dil # sched: [1:0.50] +; SKX-NEXT: setne %dil # sched: [1:0.50] +; SKX-NEXT: setbe %dil # sched: [2:1.00] +; SKX-NEXT: seta %dil # sched: [2:1.00] +; SKX-NEXT: sets %dil # sched: [1:0.50] +; SKX-NEXT: setns %dil # sched: [1:0.50] +; SKX-NEXT: setp %dil # sched: [1:0.50] +; SKX-NEXT: setnp %dil # sched: [1:0.50] +; SKX-NEXT: setl %dil # sched: [1:0.50] +; SKX-NEXT: setge %dil # sched: [1:0.50] +; SKX-NEXT: setle %dil # sched: [1:0.50] +; SKX-NEXT: setg %dil # sched: [1:0.50] +; SKX-NEXT: seto (%rsi) # sched: [2:1.00] +; SKX-NEXT: setno (%rsi) # sched: [2:1.00] +; SKX-NEXT: setb (%rsi) # sched: [2:1.00] +; SKX-NEXT: setae (%rsi) # sched: [2:1.00] +; SKX-NEXT: sete (%rsi) # sched: [2:1.00] +; SKX-NEXT: setne (%rsi) # sched: [2:1.00] +; SKX-NEXT: setbe (%rsi) # sched: [3:1.00] +; SKX-NEXT: seta (%rsi) # sched: [3:1.00] +; SKX-NEXT: sets (%rsi) # sched: [2:1.00] +; SKX-NEXT: setns (%rsi) # sched: [2:1.00] +; SKX-NEXT: setp (%rsi) # sched: [2:1.00] +; SKX-NEXT: setnp (%rsi) # sched: [2:1.00] +; SKX-NEXT: setl (%rsi) # sched: [2:1.00] +; SKX-NEXT: setge (%rsi) # sched: [2:1.00] +; SKX-NEXT: setle (%rsi) # sched: [2:1.00] +; SKX-NEXT: setg (%rsi) # sched: [2:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retq # sched: [7:1.00] +; +; BTVER2-LABEL: test_setcc: +; BTVER2: # %bb.0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: seto %dil # sched: [1:0.50] +; BTVER2-NEXT: setno %dil # sched: [1:0.50] +; BTVER2-NEXT: setb %dil # sched: [1:0.50] +; BTVER2-NEXT: setae %dil # sched: [1:0.50] +; BTVER2-NEXT: sete %dil # sched: [1:0.50] +; BTVER2-NEXT: setne %dil # sched: [1:0.50] +; BTVER2-NEXT: setbe %dil # sched: [1:0.50] +; BTVER2-NEXT: seta %dil # sched: [1:0.50] +; BTVER2-NEXT: sets %dil # sched: [1:0.50] +; BTVER2-NEXT: setns %dil # sched: [1:0.50] +; BTVER2-NEXT: setp %dil # sched: [1:0.50] +; BTVER2-NEXT: setnp %dil # sched: [1:0.50] +; BTVER2-NEXT: setl %dil # sched: [1:0.50] +; BTVER2-NEXT: setge %dil # sched: [1:0.50] +; BTVER2-NEXT: setle %dil # sched: [1:0.50] +; BTVER2-NEXT: setg %dil # sched: [1:0.50] +; BTVER2-NEXT: seto (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setno (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setb (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setae (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: sete (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setne (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setbe (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: seta (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: sets (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setns (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setp (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setnp (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setl (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setge (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setle (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: setg (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retq # sched: [4:1.00] +; +; ZNVER1-LABEL: test_setcc: +; ZNVER1: # %bb.0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: seto %dil # sched: [1:0.25] +; ZNVER1-NEXT: setno %dil # sched: [1:0.25] +; ZNVER1-NEXT: setb %dil # sched: [1:0.25] +; ZNVER1-NEXT: setae %dil # sched: [1:0.25] +; ZNVER1-NEXT: sete %dil # sched: [1:0.25] +; ZNVER1-NEXT: setne %dil # sched: [1:0.25] +; ZNVER1-NEXT: setbe %dil # sched: [1:0.25] +; ZNVER1-NEXT: seta %dil # sched: [1:0.25] +; ZNVER1-NEXT: sets %dil # sched: [1:0.25] +; ZNVER1-NEXT: setns %dil # sched: [1:0.25] +; ZNVER1-NEXT: setp %dil # sched: [1:0.25] +; ZNVER1-NEXT: setnp %dil # sched: [1:0.25] +; ZNVER1-NEXT: setl %dil # sched: [1:0.25] +; ZNVER1-NEXT: setge %dil # sched: [1:0.25] +; ZNVER1-NEXT: setle %dil # sched: [1:0.25] +; ZNVER1-NEXT: setg %dil # sched: [1:0.25] +; ZNVER1-NEXT: seto (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setno (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setb (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setae (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: sete (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setne (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setbe (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: seta (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: sets (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setns (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setp (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setnp (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setl (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setge (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setle (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: setg (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retq # sched: [1:0.50] + call void asm sideeffect "seto $0 \0A\09 setno $0 \0A\09 setb $0 \0A\09 setnb $0 \0A\09 setz $0 \0A\09 setnz $0 \0A\09 setbe $0 \0A\09 setnbe $0 \0A\09 sets $0 \0A\09 setns $0 \0A\09 setp $0 \0A\09 setnp $0 \0A\09 setl $0 \0A\09 setnl $0 \0A\09 setle $0 \0A\09 setnle $0 \0A\09 seto $1 \0A\09 setno $1 \0A\09 setb $1 \0A\09 setnb $1 \0A\09 setz $1 \0A\09 setnz $1 \0A\09 setbe $1 \0A\09 setnbe $1 \0A\09 sets $1 \0A\09 setns $1 \0A\09 setp $1 \0A\09 setnp $1 \0A\09 setl $1 \0A\09 setnl $1 \0A\09 setle $1 \0A\09 setnle $1", "r,*m"(i8 %a0, i8 *%a1) + ret void +} + +define void @test_shld_shrd_16(i16 %a0, i16 %a1, i16 *%a2) optsize { +; GENERIC-LABEL: test_shld_shrd_16: +; GENERIC: # %bb.0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: shldw %cl, %si, %di # sched: [4:1.50] +; GENERIC-NEXT: shrdw %cl, %si, %di # sched: [4:1.50] +; GENERIC-NEXT: shldw %cl, %si, (%rdx) # sched: [10:1.50] +; GENERIC-NEXT: shrdw %cl, %si, (%rdx) # sched: [10:1.50] +; GENERIC-NEXT: shldw $7, %si, %di # sched: [2:0.67] +; GENERIC-NEXT: shrdw $7, %si, %di # sched: [2:0.67] +; GENERIC-NEXT: shldw $7, %si, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: shrdw $7, %si, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_shld_shrd_16: +; ATOM: # %bb.0: +; ATOM-NEXT: #APP +; ATOM-NEXT: shldw %cl, %si, %di # sched: [6:3.00] +; ATOM-NEXT: shrdw %cl, %si, %di # sched: [6:3.00] +; ATOM-NEXT: shldw %cl, %si, (%rdx) # sched: [6:3.00] +; ATOM-NEXT: shrdw %cl, %si, (%rdx) # sched: [6:3.00] +; ATOM-NEXT: shldw $7, %si, %di # sched: [6:3.00] +; ATOM-NEXT: shrdw $7, %si, %di # sched: [6:3.00] +; ATOM-NEXT: shldw $7, %si, (%rdx) # sched: [6:3.00] +; ATOM-NEXT: shrdw $7, %si, (%rdx) # sched: [6:3.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retq # sched: [79:39.50] +; +; SLM-LABEL: test_shld_shrd_16: +; SLM: # %bb.0: +; SLM-NEXT: #APP +; SLM-NEXT: shldw %cl, %si, %di # sched: [1:1.00] +; SLM-NEXT: shrdw %cl, %si, %di # sched: [1:1.00] +; SLM-NEXT: shldw %cl, %si, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrdw %cl, %si, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shldw $7, %si, %di # sched: [1:1.00] +; SLM-NEXT: shrdw $7, %si, %di # sched: [1:1.00] +; SLM-NEXT: shldw $7, %si, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrdw $7, %si, (%rdx) # sched: [4:2.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_shld_shrd_16: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: shldw %cl, %si, %di # sched: [4:1.50] +; SANDY-NEXT: shrdw %cl, %si, %di # sched: [4:1.50] +; SANDY-NEXT: shldw %cl, %si, (%rdx) # sched: [10:1.50] +; SANDY-NEXT: shrdw %cl, %si, (%rdx) # sched: [10:1.50] +; SANDY-NEXT: shldw $7, %si, %di # sched: [2:0.67] +; SANDY-NEXT: shrdw $7, %si, %di # sched: [2:0.67] +; SANDY-NEXT: shldw $7, %si, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: shrdw $7, %si, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retq # sched: [1:1.00] +; +; HASWELL-LABEL: test_shld_shrd_16: +; HASWELL: # %bb.0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: shldw %cl, %si, %di # sched: [6:1.00] +; HASWELL-NEXT: shrdw %cl, %si, %di # sched: [6:1.00] +; HASWELL-NEXT: shldw %cl, %si, (%rdx) # sched: [12:1.00] +; HASWELL-NEXT: shrdw %cl, %si, (%rdx) # sched: [12:1.00] +; HASWELL-NEXT: shldw $7, %si, %di # sched: [3:1.00] +; HASWELL-NEXT: shrdw $7, %si, %di # sched: [3:1.00] +; HASWELL-NEXT: shldw $7, %si, (%rdx) # sched: [10:1.00] +; HASWELL-NEXT: shrdw $7, %si, (%rdx) # sched: [10:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retq # sched: [7:1.00] +; +; BROADWELL-LABEL: test_shld_shrd_16: +; BROADWELL: # %bb.0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: shldw %cl, %si, %di # sched: [6:1.00] +; BROADWELL-NEXT: shrdw %cl, %si, %di # sched: [6:1.00] +; BROADWELL-NEXT: shldw %cl, %si, (%rdx) # sched: [11:1.00] +; BROADWELL-NEXT: shrdw %cl, %si, (%rdx) # sched: [11:1.00] +; BROADWELL-NEXT: shldw $7, %si, %di # sched: [3:1.00] +; BROADWELL-NEXT: shrdw $7, %si, %di # sched: [3:1.00] +; BROADWELL-NEXT: shldw $7, %si, (%rdx) # sched: [9:1.00] +; BROADWELL-NEXT: shrdw $7, %si, (%rdx) # sched: [9:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retq # sched: [7:1.00] +; +; SKYLAKE-LABEL: test_shld_shrd_16: +; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: shldw %cl, %si, %di # sched: [6:1.00] +; SKYLAKE-NEXT: shrdw %cl, %si, %di # sched: [6:1.00] +; SKYLAKE-NEXT: shldw %cl, %si, (%rdx) # sched: [11:1.00] +; SKYLAKE-NEXT: shrdw %cl, %si, (%rdx) # sched: [11:1.00] +; SKYLAKE-NEXT: shldw $7, %si, %di # sched: [3:1.00] +; SKYLAKE-NEXT: shrdw $7, %si, %di # sched: [3:1.00] +; SKYLAKE-NEXT: shldw $7, %si, (%rdx) # sched: [9:1.00] +; SKYLAKE-NEXT: shrdw $7, %si, (%rdx) # sched: [9:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_shld_shrd_16: +; SKX: # %bb.0: +; SKX-NEXT: #APP +; SKX-NEXT: shldw %cl, %si, %di # sched: [6:1.00] +; SKX-NEXT: shrdw %cl, %si, %di # sched: [6:1.00] +; SKX-NEXT: shldw %cl, %si, (%rdx) # sched: [11:1.00] +; SKX-NEXT: shrdw %cl, %si, (%rdx) # sched: [11:1.00] +; SKX-NEXT: shldw $7, %si, %di # sched: [3:1.00] +; SKX-NEXT: shrdw $7, %si, %di # sched: [3:1.00] +; SKX-NEXT: shldw $7, %si, (%rdx) # sched: [9:1.00] +; SKX-NEXT: shrdw $7, %si, (%rdx) # sched: [9:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retq # sched: [7:1.00] +; +; BTVER2-LABEL: test_shld_shrd_16: +; BTVER2: # %bb.0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: shldw %cl, %si, %di # sched: [4:4.00] +; BTVER2-NEXT: shrdw %cl, %si, %di # sched: [4:4.00] +; BTVER2-NEXT: shldw %cl, %si, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: shrdw %cl, %si, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: shldw $7, %si, %di # sched: [3:3.00] +; BTVER2-NEXT: shrdw $7, %si, %di # sched: [3:3.00] +; BTVER2-NEXT: shldw $7, %si, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: shrdw $7, %si, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retq # sched: [4:1.00] +; +; ZNVER1-LABEL: test_shld_shrd_16: +; ZNVER1: # %bb.0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: shldw %cl, %si, %di # sched: [100:?] +; ZNVER1-NEXT: shrdw %cl, %si, %di # sched: [100:?] +; ZNVER1-NEXT: shldw %cl, %si, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: shrdw %cl, %si, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: shldw $7, %si, %di # sched: [1:0.25] +; ZNVER1-NEXT: shrdw $7, %si, %di # sched: [1:0.25] +; ZNVER1-NEXT: shldw $7, %si, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrdw $7, %si, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retq # sched: [1:0.50] + call void asm sideeffect "shld $1, $0 \0A\09 shrd $1, $0 \0A\09 shld $1, $2 \0A\09 shrd $1, $2 \0A\09 shld $3, $1, $0 \0A\09 shrd $3, $1, $0 \0A\09 shld $3, $1, $2 \0A\09 shrd $3, $1, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7) + ret void +} +define void @test_shld_shrd_32(i32 %a0, i32 %a1, i32 *%a2) optsize { +; GENERIC-LABEL: test_shld_shrd_32: +; GENERIC: # %bb.0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: shldl %cl, %esi, %edi # sched: [4:1.50] +; GENERIC-NEXT: shrdl %cl, %esi, %edi # sched: [4:1.50] +; GENERIC-NEXT: shldl %cl, %esi, (%rdx) # sched: [10:1.50] +; GENERIC-NEXT: shrdl %cl, %esi, (%rdx) # sched: [10:1.50] +; GENERIC-NEXT: shldl $7, %esi, %edi # sched: [2:0.67] +; GENERIC-NEXT: shrdl $7, %esi, %edi # sched: [2:0.67] +; GENERIC-NEXT: shldl $7, %esi, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: shrdl $7, %esi, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_shld_shrd_32: +; ATOM: # %bb.0: +; ATOM-NEXT: #APP +; ATOM-NEXT: shldl %cl, %esi, %edi # sched: [2:1.00] +; ATOM-NEXT: shrdl %cl, %esi, %edi # sched: [2:1.00] +; ATOM-NEXT: shldl %cl, %esi, (%rdx) # sched: [4:2.00] +; ATOM-NEXT: shrdl %cl, %esi, (%rdx) # sched: [4:2.00] +; ATOM-NEXT: shldl $7, %esi, %edi # sched: [2:1.00] +; ATOM-NEXT: shrdl $7, %esi, %edi # sched: [2:1.00] +; ATOM-NEXT: shldl $7, %esi, (%rdx) # sched: [4:2.00] +; ATOM-NEXT: shrdl $7, %esi, (%rdx) # sched: [4:2.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retq # sched: [79:39.50] +; +; SLM-LABEL: test_shld_shrd_32: +; SLM: # %bb.0: +; SLM-NEXT: #APP +; SLM-NEXT: shldl %cl, %esi, %edi # sched: [1:1.00] +; SLM-NEXT: shrdl %cl, %esi, %edi # sched: [1:1.00] +; SLM-NEXT: shldl %cl, %esi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrdl %cl, %esi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shldl $7, %esi, %edi # sched: [1:1.00] +; SLM-NEXT: shrdl $7, %esi, %edi # sched: [1:1.00] +; SLM-NEXT: shldl $7, %esi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrdl $7, %esi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_shld_shrd_32: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: shldl %cl, %esi, %edi # sched: [4:1.50] +; SANDY-NEXT: shrdl %cl, %esi, %edi # sched: [4:1.50] +; SANDY-NEXT: shldl %cl, %esi, (%rdx) # sched: [10:1.50] +; SANDY-NEXT: shrdl %cl, %esi, (%rdx) # sched: [10:1.50] +; SANDY-NEXT: shldl $7, %esi, %edi # sched: [2:0.67] +; SANDY-NEXT: shrdl $7, %esi, %edi # sched: [2:0.67] +; SANDY-NEXT: shldl $7, %esi, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: shrdl $7, %esi, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retq # sched: [1:1.00] +; +; HASWELL-LABEL: test_shld_shrd_32: +; HASWELL: # %bb.0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: shldl %cl, %esi, %edi # sched: [6:1.00] +; HASWELL-NEXT: shrdl %cl, %esi, %edi # sched: [6:1.00] +; HASWELL-NEXT: shldl %cl, %esi, (%rdx) # sched: [12:1.00] +; HASWELL-NEXT: shrdl %cl, %esi, (%rdx) # sched: [12:1.00] +; HASWELL-NEXT: shldl $7, %esi, %edi # sched: [3:1.00] +; HASWELL-NEXT: shrdl $7, %esi, %edi # sched: [3:1.00] +; HASWELL-NEXT: shldl $7, %esi, (%rdx) # sched: [10:1.00] +; HASWELL-NEXT: shrdl $7, %esi, (%rdx) # sched: [10:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retq # sched: [7:1.00] +; +; BROADWELL-LABEL: test_shld_shrd_32: +; BROADWELL: # %bb.0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: shldl %cl, %esi, %edi # sched: [6:1.00] +; BROADWELL-NEXT: shrdl %cl, %esi, %edi # sched: [6:1.00] +; BROADWELL-NEXT: shldl %cl, %esi, (%rdx) # sched: [11:1.00] +; BROADWELL-NEXT: shrdl %cl, %esi, (%rdx) # sched: [11:1.00] +; BROADWELL-NEXT: shldl $7, %esi, %edi # sched: [3:1.00] +; BROADWELL-NEXT: shrdl $7, %esi, %edi # sched: [3:1.00] +; BROADWELL-NEXT: shldl $7, %esi, (%rdx) # sched: [9:1.00] +; BROADWELL-NEXT: shrdl $7, %esi, (%rdx) # sched: [9:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retq # sched: [7:1.00] +; +; SKYLAKE-LABEL: test_shld_shrd_32: +; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: shldl %cl, %esi, %edi # sched: [6:1.00] +; SKYLAKE-NEXT: shrdl %cl, %esi, %edi # sched: [6:1.00] +; SKYLAKE-NEXT: shldl %cl, %esi, (%rdx) # sched: [11:1.00] +; SKYLAKE-NEXT: shrdl %cl, %esi, (%rdx) # sched: [11:1.00] +; SKYLAKE-NEXT: shldl $7, %esi, %edi # sched: [3:1.00] +; SKYLAKE-NEXT: shrdl $7, %esi, %edi # sched: [3:1.00] +; SKYLAKE-NEXT: shldl $7, %esi, (%rdx) # sched: [9:1.00] +; SKYLAKE-NEXT: shrdl $7, %esi, (%rdx) # sched: [9:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_shld_shrd_32: +; SKX: # %bb.0: +; SKX-NEXT: #APP +; SKX-NEXT: shldl %cl, %esi, %edi # sched: [6:1.00] +; SKX-NEXT: shrdl %cl, %esi, %edi # sched: [6:1.00] +; SKX-NEXT: shldl %cl, %esi, (%rdx) # sched: [11:1.00] +; SKX-NEXT: shrdl %cl, %esi, (%rdx) # sched: [11:1.00] +; SKX-NEXT: shldl $7, %esi, %edi # sched: [3:1.00] +; SKX-NEXT: shrdl $7, %esi, %edi # sched: [3:1.00] +; SKX-NEXT: shldl $7, %esi, (%rdx) # sched: [9:1.00] +; SKX-NEXT: shrdl $7, %esi, (%rdx) # sched: [9:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retq # sched: [7:1.00] +; +; BTVER2-LABEL: test_shld_shrd_32: +; BTVER2: # %bb.0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: shldl %cl, %esi, %edi # sched: [4:4.00] +; BTVER2-NEXT: shrdl %cl, %esi, %edi # sched: [4:4.00] +; BTVER2-NEXT: shldl %cl, %esi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: shrdl %cl, %esi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: shldl $7, %esi, %edi # sched: [3:3.00] +; BTVER2-NEXT: shrdl $7, %esi, %edi # sched: [3:3.00] +; BTVER2-NEXT: shldl $7, %esi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: shrdl $7, %esi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retq # sched: [4:1.00] +; +; ZNVER1-LABEL: test_shld_shrd_32: +; ZNVER1: # %bb.0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: shldl %cl, %esi, %edi # sched: [100:?] +; ZNVER1-NEXT: shrdl %cl, %esi, %edi # sched: [100:?] +; ZNVER1-NEXT: shldl %cl, %esi, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: shrdl %cl, %esi, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: shldl $7, %esi, %edi # sched: [1:0.25] +; ZNVER1-NEXT: shrdl $7, %esi, %edi # sched: [1:0.25] +; ZNVER1-NEXT: shldl $7, %esi, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrdl $7, %esi, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retq # sched: [1:0.50] + call void asm sideeffect "shld $1, $0 \0A\09 shrd $1, $0 \0A\09 shld $1, $2 \0A\09 shrd $1, $2 \0A\09 shld $3, $1, $0 \0A\09 shrd $3, $1, $0 \0A\09 shld $3, $1, $2 \0A\09 shrd $3, $1, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7) + ret void +} +define void @test_shld_shrd_64(i64 %a0, i64 %a1, i64 *%a2) optsize { +; GENERIC-LABEL: test_shld_shrd_64: +; GENERIC: # %bb.0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: shldq %cl, %rsi, %rdi # sched: [4:1.50] +; GENERIC-NEXT: shrdq %cl, %rsi, %rdi # sched: [4:1.50] +; GENERIC-NEXT: shldq %cl, %rsi, (%rdx) # sched: [10:1.50] +; GENERIC-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [10:1.50] +; GENERIC-NEXT: shldq $7, %rsi, %rdi # sched: [2:0.67] +; GENERIC-NEXT: shrdq $7, %rsi, %rdi # sched: [2:0.67] +; GENERIC-NEXT: shldq $7, %rsi, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: shrdq $7, %rsi, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_shld_shrd_64: +; ATOM: # %bb.0: +; ATOM-NEXT: #APP +; ATOM-NEXT: shldq %cl, %rsi, %rdi # sched: [8:4.00] +; ATOM-NEXT: shrdq %cl, %rsi, %rdi # sched: [8:4.00] +; ATOM-NEXT: shldq %cl, %rsi, (%rdx) # sched: [9:4.50] +; ATOM-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [9:4.50] +; ATOM-NEXT: shldq $7, %rsi, %rdi # sched: [9:4.50] +; ATOM-NEXT: shrdq $7, %rsi, %rdi # sched: [9:4.50] +; ATOM-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:4.50] +; ATOM-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:4.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retq # sched: [79:39.50] +; +; SLM-LABEL: test_shld_shrd_64: +; SLM: # %bb.0: +; SLM-NEXT: #APP +; SLM-NEXT: shldq %cl, %rsi, %rdi # sched: [1:1.00] +; SLM-NEXT: shrdq %cl, %rsi, %rdi # sched: [1:1.00] +; SLM-NEXT: shldq %cl, %rsi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shldq $7, %rsi, %rdi # sched: [1:1.00] +; SLM-NEXT: shrdq $7, %rsi, %rdi # sched: [1:1.00] +; SLM-NEXT: shldq $7, %rsi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: shrdq $7, %rsi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_shld_shrd_64: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: shldq %cl, %rsi, %rdi # sched: [4:1.50] +; SANDY-NEXT: shrdq %cl, %rsi, %rdi # sched: [4:1.50] +; SANDY-NEXT: shldq %cl, %rsi, (%rdx) # sched: [10:1.50] +; SANDY-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [10:1.50] +; SANDY-NEXT: shldq $7, %rsi, %rdi # sched: [2:0.67] +; SANDY-NEXT: shrdq $7, %rsi, %rdi # sched: [2:0.67] +; SANDY-NEXT: shldq $7, %rsi, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: shrdq $7, %rsi, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retq # sched: [1:1.00] +; +; HASWELL-LABEL: test_shld_shrd_64: +; HASWELL: # %bb.0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: shldq %cl, %rsi, %rdi # sched: [6:1.00] +; HASWELL-NEXT: shrdq %cl, %rsi, %rdi # sched: [6:1.00] +; HASWELL-NEXT: shldq %cl, %rsi, (%rdx) # sched: [12:1.00] +; HASWELL-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [12:1.00] +; HASWELL-NEXT: shldq $7, %rsi, %rdi # sched: [3:1.00] +; HASWELL-NEXT: shrdq $7, %rsi, %rdi # sched: [3:1.00] +; HASWELL-NEXT: shldq $7, %rsi, (%rdx) # sched: [10:1.00] +; HASWELL-NEXT: shrdq $7, %rsi, (%rdx) # sched: [10:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retq # sched: [7:1.00] +; +; BROADWELL-LABEL: test_shld_shrd_64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: seto %dil # sched: [1:0.50] -; BROADWELL-NEXT: setno %dil # sched: [1:0.50] -; BROADWELL-NEXT: setb %dil # sched: [1:0.50] -; BROADWELL-NEXT: setae %dil # sched: [1:0.50] -; BROADWELL-NEXT: sete %dil # sched: [1:0.50] -; BROADWELL-NEXT: setne %dil # sched: [1:0.50] -; BROADWELL-NEXT: setbe %dil # sched: [2:0.50] -; BROADWELL-NEXT: seta %dil # sched: [2:0.50] -; BROADWELL-NEXT: sets %dil # sched: [1:0.50] -; BROADWELL-NEXT: setns %dil # sched: [1:0.50] -; BROADWELL-NEXT: setp %dil # sched: [1:0.50] -; BROADWELL-NEXT: setnp %dil # sched: [1:0.50] -; BROADWELL-NEXT: setl %dil # sched: [1:0.50] -; BROADWELL-NEXT: setge %dil # sched: [1:0.50] -; BROADWELL-NEXT: setle %dil # sched: [1:0.50] -; BROADWELL-NEXT: setg %dil # sched: [1:0.50] -; BROADWELL-NEXT: seto (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setno (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setb (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setae (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: sete (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setne (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setbe (%rsi) # sched: [3:1.00] -; BROADWELL-NEXT: seta (%rsi) # sched: [3:1.00] -; BROADWELL-NEXT: sets (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setns (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setp (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setnp (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setl (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setge (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setle (%rsi) # sched: [2:1.00] -; BROADWELL-NEXT: setg (%rsi) # sched: [2:1.00] +; BROADWELL-NEXT: shldq %cl, %rsi, %rdi # sched: [6:1.00] +; BROADWELL-NEXT: shrdq %cl, %rsi, %rdi # sched: [6:1.00] +; BROADWELL-NEXT: shldq %cl, %rsi, (%rdx) # sched: [11:1.00] +; BROADWELL-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [11:1.00] +; BROADWELL-NEXT: shldq $7, %rsi, %rdi # sched: [3:1.00] +; BROADWELL-NEXT: shrdq $7, %rsi, %rdi # sched: [3:1.00] +; BROADWELL-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:1.00] +; BROADWELL-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_setcc: +; SKYLAKE-LABEL: test_shld_shrd_64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: seto %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setno %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setb %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setae %dil # sched: [1:0.50] -; SKYLAKE-NEXT: sete %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setne %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setbe %dil # sched: [2:1.00] -; SKYLAKE-NEXT: seta %dil # sched: [2:1.00] -; SKYLAKE-NEXT: sets %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setns %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setp %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setnp %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setl %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setge %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setle %dil # sched: [1:0.50] -; SKYLAKE-NEXT: setg %dil # sched: [1:0.50] -; SKYLAKE-NEXT: seto (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setno (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setb (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setae (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: sete (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setne (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setbe (%rsi) # sched: [3:1.00] -; SKYLAKE-NEXT: seta (%rsi) # sched: [3:1.00] -; SKYLAKE-NEXT: sets (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setns (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setp (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setnp (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setl (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setge (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setle (%rsi) # sched: [2:1.00] -; SKYLAKE-NEXT: setg (%rsi) # sched: [2:1.00] +; SKYLAKE-NEXT: shldq %cl, %rsi, %rdi # sched: [6:1.00] +; SKYLAKE-NEXT: shrdq %cl, %rsi, %rdi # sched: [6:1.00] +; SKYLAKE-NEXT: shldq %cl, %rsi, (%rdx) # sched: [11:1.00] +; SKYLAKE-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [11:1.00] +; SKYLAKE-NEXT: shldq $7, %rsi, %rdi # sched: [3:1.00] +; SKYLAKE-NEXT: shrdq $7, %rsi, %rdi # sched: [3:1.00] +; SKYLAKE-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:1.00] +; SKYLAKE-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_setcc: +; SKX-LABEL: test_shld_shrd_64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: seto %dil # sched: [1:0.50] -; SKX-NEXT: setno %dil # sched: [1:0.50] -; SKX-NEXT: setb %dil # sched: [1:0.50] -; SKX-NEXT: setae %dil # sched: [1:0.50] -; SKX-NEXT: sete %dil # sched: [1:0.50] -; SKX-NEXT: setne %dil # sched: [1:0.50] -; SKX-NEXT: setbe %dil # sched: [2:1.00] -; SKX-NEXT: seta %dil # sched: [2:1.00] -; SKX-NEXT: sets %dil # sched: [1:0.50] -; SKX-NEXT: setns %dil # sched: [1:0.50] -; SKX-NEXT: setp %dil # sched: [1:0.50] -; SKX-NEXT: setnp %dil # sched: [1:0.50] -; SKX-NEXT: setl %dil # sched: [1:0.50] -; SKX-NEXT: setge %dil # sched: [1:0.50] -; SKX-NEXT: setle %dil # sched: [1:0.50] -; SKX-NEXT: setg %dil # sched: [1:0.50] -; SKX-NEXT: seto (%rsi) # sched: [2:1.00] -; SKX-NEXT: setno (%rsi) # sched: [2:1.00] -; SKX-NEXT: setb (%rsi) # sched: [2:1.00] -; SKX-NEXT: setae (%rsi) # sched: [2:1.00] -; SKX-NEXT: sete (%rsi) # sched: [2:1.00] -; SKX-NEXT: setne (%rsi) # sched: [2:1.00] -; SKX-NEXT: setbe (%rsi) # sched: [3:1.00] -; SKX-NEXT: seta (%rsi) # sched: [3:1.00] -; SKX-NEXT: sets (%rsi) # sched: [2:1.00] -; SKX-NEXT: setns (%rsi) # sched: [2:1.00] -; SKX-NEXT: setp (%rsi) # sched: [2:1.00] -; SKX-NEXT: setnp (%rsi) # sched: [2:1.00] -; SKX-NEXT: setl (%rsi) # sched: [2:1.00] -; SKX-NEXT: setge (%rsi) # sched: [2:1.00] -; SKX-NEXT: setle (%rsi) # sched: [2:1.00] -; SKX-NEXT: setg (%rsi) # sched: [2:1.00] +; SKX-NEXT: shldq %cl, %rsi, %rdi # sched: [6:1.00] +; SKX-NEXT: shrdq %cl, %rsi, %rdi # sched: [6:1.00] +; SKX-NEXT: shldq %cl, %rsi, (%rdx) # sched: [11:1.00] +; SKX-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [11:1.00] +; SKX-NEXT: shldq $7, %rsi, %rdi # sched: [3:1.00] +; SKX-NEXT: shrdq $7, %rsi, %rdi # sched: [3:1.00] +; SKX-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:1.00] +; SKX-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_setcc: +; BTVER2-LABEL: test_shld_shrd_64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: seto %dil # sched: [1:0.50] -; BTVER2-NEXT: setno %dil # sched: [1:0.50] -; BTVER2-NEXT: setb %dil # sched: [1:0.50] -; BTVER2-NEXT: setae %dil # sched: [1:0.50] -; BTVER2-NEXT: sete %dil # sched: [1:0.50] -; BTVER2-NEXT: setne %dil # sched: [1:0.50] -; BTVER2-NEXT: setbe %dil # sched: [1:0.50] -; BTVER2-NEXT: seta %dil # sched: [1:0.50] -; BTVER2-NEXT: sets %dil # sched: [1:0.50] -; BTVER2-NEXT: setns %dil # sched: [1:0.50] -; BTVER2-NEXT: setp %dil # sched: [1:0.50] -; BTVER2-NEXT: setnp %dil # sched: [1:0.50] -; BTVER2-NEXT: setl %dil # sched: [1:0.50] -; BTVER2-NEXT: setge %dil # sched: [1:0.50] -; BTVER2-NEXT: setle %dil # sched: [1:0.50] -; BTVER2-NEXT: setg %dil # sched: [1:0.50] -; BTVER2-NEXT: seto (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setno (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setb (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setae (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: sete (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setne (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setbe (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: seta (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: sets (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setns (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setp (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setnp (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setl (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setge (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setle (%rsi) # sched: [1:1.00] -; BTVER2-NEXT: setg (%rsi) # sched: [1:1.00] +; BTVER2-NEXT: shldq %cl, %rsi, %rdi # sched: [4:4.00] +; BTVER2-NEXT: shrdq %cl, %rsi, %rdi # sched: [4:4.00] +; BTVER2-NEXT: shldq %cl, %rsi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: shldq $7, %rsi, %rdi # sched: [3:3.00] +; BTVER2-NEXT: shrdq $7, %rsi, %rdi # sched: [3:3.00] +; BTVER2-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retq # sched: [4:1.00] +; +; ZNVER1-LABEL: test_shld_shrd_64: +; ZNVER1: # %bb.0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: shldq %cl, %rsi, %rdi # sched: [100:?] +; ZNVER1-NEXT: shrdq %cl, %rsi, %rdi # sched: [100:?] +; ZNVER1-NEXT: shldq %cl, %rsi, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [100:?] +; ZNVER1-NEXT: shldq $7, %rsi, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: shrdq $7, %rsi, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: shldq $7, %rsi, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: shrdq $7, %rsi, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retq # sched: [1:0.50] + call void asm sideeffect "shld $1, $0 \0A\09 shrd $1, $0 \0A\09 shld $1, $2 \0A\09 shrd $1, $2 \0A\09 shld $3, $1, $0 \0A\09 shrd $3, $1, $0 \0A\09 shld $3, $1, $2 \0A\09 shrd $3, $1, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7) + ret void +} + +define void @test_stc_std() optsize { +; GENERIC-LABEL: test_stc_std: +; GENERIC: # %bb.0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: stc # sched: [1:0.33] +; GENERIC-NEXT: std # sched: [1:0.33] +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retq # sched: [1:1.00] +; +; ATOM-LABEL: test_stc_std: +; ATOM: # %bb.0: +; ATOM-NEXT: #APP +; ATOM-NEXT: stc # sched: [1:0.50] +; ATOM-NEXT: std # sched: [21:10.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retq # sched: [79:39.50] +; +; SLM-LABEL: test_stc_std: +; SLM: # %bb.0: +; SLM-NEXT: #APP +; SLM-NEXT: stc # sched: [1:0.50] +; SLM-NEXT: std # sched: [1:0.50] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_stc_std: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: stc # sched: [1:0.33] +; SANDY-NEXT: std # sched: [1:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retq # sched: [1:1.00] +; +; HASWELL-LABEL: test_stc_std: +; HASWELL: # %bb.0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: stc # sched: [1:0.25] +; HASWELL-NEXT: std # sched: [6:1.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retq # sched: [7:1.00] +; +; BROADWELL-LABEL: test_stc_std: +; BROADWELL: # %bb.0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: stc # sched: [1:0.25] +; BROADWELL-NEXT: std # sched: [6:1.50] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retq # sched: [7:1.00] +; +; SKYLAKE-LABEL: test_stc_std: +; SKYLAKE: # %bb.0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: stc # sched: [1:0.25] +; SKYLAKE-NEXT: std # sched: [6:1.50] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retq # sched: [7:1.00] +; +; SKX-LABEL: test_stc_std: +; SKX: # %bb.0: +; SKX-NEXT: #APP +; SKX-NEXT: stc # sched: [1:0.25] +; SKX-NEXT: std # sched: [6:1.50] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retq # sched: [7:1.00] +; +; BTVER2-LABEL: test_stc_std: +; BTVER2: # %bb.0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: stc # sched: [1:0.50] +; BTVER2-NEXT: std # sched: [1:0.50] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_setcc: +; ZNVER1-LABEL: test_stc_std: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: seto %dil # sched: [1:0.25] -; ZNVER1-NEXT: setno %dil # sched: [1:0.25] -; ZNVER1-NEXT: setb %dil # sched: [1:0.25] -; ZNVER1-NEXT: setae %dil # sched: [1:0.25] -; ZNVER1-NEXT: sete %dil # sched: [1:0.25] -; ZNVER1-NEXT: setne %dil # sched: [1:0.25] -; ZNVER1-NEXT: setbe %dil # sched: [1:0.25] -; ZNVER1-NEXT: seta %dil # sched: [1:0.25] -; ZNVER1-NEXT: sets %dil # sched: [1:0.25] -; ZNVER1-NEXT: setns %dil # sched: [1:0.25] -; ZNVER1-NEXT: setp %dil # sched: [1:0.25] -; ZNVER1-NEXT: setnp %dil # sched: [1:0.25] -; ZNVER1-NEXT: setl %dil # sched: [1:0.25] -; ZNVER1-NEXT: setge %dil # sched: [1:0.25] -; ZNVER1-NEXT: setle %dil # sched: [1:0.25] -; ZNVER1-NEXT: setg %dil # sched: [1:0.25] -; ZNVER1-NEXT: seto (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setno (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setb (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setae (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: sete (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setne (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setbe (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: seta (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: sets (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setns (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setp (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setnp (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setl (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setge (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setle (%rsi) # sched: [1:0.25] -; ZNVER1-NEXT: setg (%rsi) # sched: [1:0.25] +; ZNVER1-NEXT: stc # sched: [1:0.25] +; ZNVER1-NEXT: std # sched: [1:0.25] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "seto $0 \0A\09 setno $0 \0A\09 setb $0 \0A\09 setnb $0 \0A\09 setz $0 \0A\09 setnz $0 \0A\09 setbe $0 \0A\09 setnbe $0 \0A\09 sets $0 \0A\09 setns $0 \0A\09 setp $0 \0A\09 setnp $0 \0A\09 setl $0 \0A\09 setnl $0 \0A\09 setle $0 \0A\09 setnle $0 \0A\09 seto $1 \0A\09 setno $1 \0A\09 setb $1 \0A\09 setnb $1 \0A\09 setz $1 \0A\09 setnz $1 \0A\09 setbe $1 \0A\09 setnbe $1 \0A\09 sets $1 \0A\09 setns $1 \0A\09 setp $1 \0A\09 setnp $1 \0A\09 setl $1 \0A\09 setnl $1 \0A\09 setle $1 \0A\09 setnle $1", "r,*m"(i8 %a0, i8 *%a1) + call void asm sideeffect "stc \0A\09 std", ""() ret void } -define void @test_shld_shrd_16(i16 %a0, i16 %a1, i16 *%a2) optsize { -; GENERIC-LABEL: test_shld_shrd_16: +define void @test_stos() optsize { +; GENERIC-LABEL: test_stos: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: shldw %cl, %si, %di # sched: [4:1.50] -; GENERIC-NEXT: shrdw %cl, %si, %di # sched: [4:1.50] -; GENERIC-NEXT: shldw %cl, %si, (%rdx) # sched: [10:1.50] -; GENERIC-NEXT: shrdw %cl, %si, (%rdx) # sched: [10:1.50] -; GENERIC-NEXT: shldw $7, %si, %di # sched: [2:0.67] -; GENERIC-NEXT: shrdw $7, %si, %di # sched: [2:0.67] -; GENERIC-NEXT: shldw $7, %si, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: shrdw $7, %si, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: stosb %al, %es:(%rdi) # sched: [5:1.00] +; GENERIC-NEXT: stosw %ax, %es:(%rdi) # sched: [5:1.00] +; GENERIC-NEXT: stosl %eax, %es:(%rdi) # sched: [5:1.00] +; GENERIC-NEXT: stosq %rax, %es:(%rdi) # sched: [5:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_shld_shrd_16: +; ATOM-LABEL: test_stos: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: shldw %cl, %si, %di # sched: [6:3.00] -; ATOM-NEXT: shrdw %cl, %si, %di # sched: [6:3.00] -; ATOM-NEXT: shldw %cl, %si, (%rdx) # sched: [6:3.00] -; ATOM-NEXT: shrdw %cl, %si, (%rdx) # sched: [6:3.00] -; ATOM-NEXT: shldw $7, %si, %di # sched: [6:3.00] -; ATOM-NEXT: shrdw $7, %si, %di # sched: [6:3.00] -; ATOM-NEXT: shldw $7, %si, (%rdx) # sched: [6:3.00] -; ATOM-NEXT: shrdw $7, %si, (%rdx) # sched: [6:3.00] +; ATOM-NEXT: stosb %al, %es:(%rdi) # sched: [1:0.50] +; ATOM-NEXT: stosw %ax, %es:(%rdi) # sched: [1:0.50] +; ATOM-NEXT: stosl %eax, %es:(%rdi) # sched: [1:0.50] +; ATOM-NEXT: stosq %rax, %es:(%rdi) # sched: [1:0.50] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_shld_shrd_16: +; SLM-LABEL: test_stos: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: shldw %cl, %si, %di # sched: [1:1.00] -; SLM-NEXT: shrdw %cl, %si, %di # sched: [1:1.00] -; SLM-NEXT: shldw %cl, %si, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrdw %cl, %si, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shldw $7, %si, %di # sched: [1:1.00] -; SLM-NEXT: shrdw $7, %si, %di # sched: [1:1.00] -; SLM-NEXT: shldw $7, %si, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrdw $7, %si, (%rdx) # sched: [4:2.00] +; SLM-NEXT: stosb %al, %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: stosw %ax, %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: stosl %eax, %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: stosq %rax, %es:(%rdi) # sched: [100:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_shld_shrd_16: +; SANDY-LABEL: test_stos: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: shldw %cl, %si, %di # sched: [4:1.50] -; SANDY-NEXT: shrdw %cl, %si, %di # sched: [4:1.50] -; SANDY-NEXT: shldw %cl, %si, (%rdx) # sched: [10:1.50] -; SANDY-NEXT: shrdw %cl, %si, (%rdx) # sched: [10:1.50] -; SANDY-NEXT: shldw $7, %si, %di # sched: [2:0.67] -; SANDY-NEXT: shrdw $7, %si, %di # sched: [2:0.67] -; SANDY-NEXT: shldw $7, %si, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: shrdw $7, %si, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: stosb %al, %es:(%rdi) # sched: [5:1.00] +; SANDY-NEXT: stosw %ax, %es:(%rdi) # sched: [5:1.00] +; SANDY-NEXT: stosl %eax, %es:(%rdi) # sched: [5:1.00] +; SANDY-NEXT: stosq %rax, %es:(%rdi) # sched: [5:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_shld_shrd_16: +; HASWELL-LABEL: test_stos: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: shldw %cl, %si, %di # sched: [6:1.00] -; HASWELL-NEXT: shrdw %cl, %si, %di # sched: [6:1.00] -; HASWELL-NEXT: shldw %cl, %si, (%rdx) # sched: [12:1.00] -; HASWELL-NEXT: shrdw %cl, %si, (%rdx) # sched: [12:1.00] -; HASWELL-NEXT: shldw $7, %si, %di # sched: [3:1.00] -; HASWELL-NEXT: shrdw $7, %si, %di # sched: [3:1.00] -; HASWELL-NEXT: shldw $7, %si, (%rdx) # sched: [10:1.00] -; HASWELL-NEXT: shrdw $7, %si, (%rdx) # sched: [10:1.00] +; HASWELL-NEXT: stosb %al, %es:(%rdi) # sched: [2:1.00] +; HASWELL-NEXT: stosw %ax, %es:(%rdi) # sched: [2:1.00] +; HASWELL-NEXT: stosl %eax, %es:(%rdi) # sched: [2:1.00] +; HASWELL-NEXT: stosq %rax, %es:(%rdi) # sched: [2:1.00] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_shld_shrd_16: +; BROADWELL-LABEL: test_stos: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: shldw %cl, %si, %di # sched: [6:1.00] -; BROADWELL-NEXT: shrdw %cl, %si, %di # sched: [6:1.00] -; BROADWELL-NEXT: shldw %cl, %si, (%rdx) # sched: [11:1.00] -; BROADWELL-NEXT: shrdw %cl, %si, (%rdx) # sched: [11:1.00] -; BROADWELL-NEXT: shldw $7, %si, %di # sched: [3:1.00] -; BROADWELL-NEXT: shrdw $7, %si, %di # sched: [3:1.00] -; BROADWELL-NEXT: shldw $7, %si, (%rdx) # sched: [9:1.00] -; BROADWELL-NEXT: shrdw $7, %si, (%rdx) # sched: [9:1.00] +; BROADWELL-NEXT: stosb %al, %es:(%rdi) # sched: [2:1.00] +; BROADWELL-NEXT: stosw %ax, %es:(%rdi) # sched: [2:1.00] +; BROADWELL-NEXT: stosl %eax, %es:(%rdi) # sched: [2:1.00] +; BROADWELL-NEXT: stosq %rax, %es:(%rdi) # sched: [2:1.00] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_shld_shrd_16: +; SKYLAKE-LABEL: test_stos: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: shldw %cl, %si, %di # sched: [6:1.00] -; SKYLAKE-NEXT: shrdw %cl, %si, %di # sched: [6:1.00] -; SKYLAKE-NEXT: shldw %cl, %si, (%rdx) # sched: [11:1.00] -; SKYLAKE-NEXT: shrdw %cl, %si, (%rdx) # sched: [11:1.00] -; SKYLAKE-NEXT: shldw $7, %si, %di # sched: [3:1.00] -; SKYLAKE-NEXT: shrdw $7, %si, %di # sched: [3:1.00] -; SKYLAKE-NEXT: shldw $7, %si, (%rdx) # sched: [9:1.00] -; SKYLAKE-NEXT: shrdw $7, %si, (%rdx) # sched: [9:1.00] +; SKYLAKE-NEXT: stosb %al, %es:(%rdi) # sched: [2:1.00] +; SKYLAKE-NEXT: stosw %ax, %es:(%rdi) # sched: [2:1.00] +; SKYLAKE-NEXT: stosl %eax, %es:(%rdi) # sched: [2:1.00] +; SKYLAKE-NEXT: stosq %rax, %es:(%rdi) # sched: [2:1.00] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_shld_shrd_16: +; SKX-LABEL: test_stos: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: shldw %cl, %si, %di # sched: [6:1.00] -; SKX-NEXT: shrdw %cl, %si, %di # sched: [6:1.00] -; SKX-NEXT: shldw %cl, %si, (%rdx) # sched: [11:1.00] -; SKX-NEXT: shrdw %cl, %si, (%rdx) # sched: [11:1.00] -; SKX-NEXT: shldw $7, %si, %di # sched: [3:1.00] -; SKX-NEXT: shrdw $7, %si, %di # sched: [3:1.00] -; SKX-NEXT: shldw $7, %si, (%rdx) # sched: [9:1.00] -; SKX-NEXT: shrdw $7, %si, (%rdx) # sched: [9:1.00] +; SKX-NEXT: stosb %al, %es:(%rdi) # sched: [2:1.00] +; SKX-NEXT: stosw %ax, %es:(%rdi) # sched: [2:1.00] +; SKX-NEXT: stosl %eax, %es:(%rdi) # sched: [2:1.00] +; SKX-NEXT: stosq %rax, %es:(%rdi) # sched: [2:1.00] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_shld_shrd_16: +; BTVER2-LABEL: test_stos: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: shldw %cl, %si, %di # sched: [4:4.00] -; BTVER2-NEXT: shrdw %cl, %si, %di # sched: [4:4.00] -; BTVER2-NEXT: shldw %cl, %si, (%rdx) # sched: [9:11.00] -; BTVER2-NEXT: shrdw %cl, %si, (%rdx) # sched: [9:11.00] -; BTVER2-NEXT: shldw $7, %si, %di # sched: [3:3.00] -; BTVER2-NEXT: shrdw $7, %si, %di # sched: [3:3.00] -; BTVER2-NEXT: shldw $7, %si, (%rdx) # sched: [9:11.00] -; BTVER2-NEXT: shrdw $7, %si, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: stosb %al, %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: stosw %ax, %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: stosl %eax, %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: stosq %rax, %es:(%rdi) # sched: [100:0.17] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_shld_shrd_16: +; ZNVER1-LABEL: test_stos: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: shldw %cl, %si, %di # sched: [100:?] -; ZNVER1-NEXT: shrdw %cl, %si, %di # sched: [100:?] -; ZNVER1-NEXT: shldw %cl, %si, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: shrdw %cl, %si, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: shldw $7, %si, %di # sched: [1:0.25] -; ZNVER1-NEXT: shrdw $7, %si, %di # sched: [1:0.25] -; ZNVER1-NEXT: shldw $7, %si, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrdw $7, %si, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: stosb %al, %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: stosw %ax, %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: stosl %eax, %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: stosq %rax, %es:(%rdi) # sched: [100:?] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "shld $1, $0 \0A\09 shrd $1, $0 \0A\09 shld $1, $2 \0A\09 shrd $1, $2 \0A\09 shld $3, $1, $0 \0A\09 shrd $3, $1, $0 \0A\09 shld $3, $1, $2 \0A\09 shrd $3, $1, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7) + call void asm sideeffect "stosb \0A\09 stosw \0A\09 stosl \0A\09 stosq", ""() ret void } -define void @test_shld_shrd_32(i32 %a0, i32 %a1, i32 *%a2) optsize { -; GENERIC-LABEL: test_shld_shrd_32: + +define void @test_sub_8(i8 %a0, i8* %a1) optsize { +; GENERIC-LABEL: test_sub_8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: shldl %cl, %esi, %edi # sched: [4:1.50] -; GENERIC-NEXT: shrdl %cl, %esi, %edi # sched: [4:1.50] -; GENERIC-NEXT: shldl %cl, %esi, (%rdx) # sched: [10:1.50] -; GENERIC-NEXT: shrdl %cl, %esi, (%rdx) # sched: [10:1.50] -; GENERIC-NEXT: shldl $7, %esi, %edi # sched: [2:0.67] -; GENERIC-NEXT: shrdl $7, %esi, %edi # sched: [2:0.67] -; GENERIC-NEXT: shldl $7, %esi, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: shrdl $7, %esi, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: subb $7, %al # sched: [1:0.33] +; GENERIC-NEXT: subb $7, %dil # sched: [1:0.33] +; GENERIC-NEXT: subb $7, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: subb %dil, %dil # sched: [1:0.33] +; GENERIC-NEXT: subb %dil, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: subb (%rsi), %dil # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_shld_shrd_32: +; ATOM-LABEL: test_sub_8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: shldl %cl, %esi, %edi # sched: [2:1.00] -; ATOM-NEXT: shrdl %cl, %esi, %edi # sched: [2:1.00] -; ATOM-NEXT: shldl %cl, %esi, (%rdx) # sched: [4:2.00] -; ATOM-NEXT: shrdl %cl, %esi, (%rdx) # sched: [4:2.00] -; ATOM-NEXT: shldl $7, %esi, %edi # sched: [2:1.00] -; ATOM-NEXT: shrdl $7, %esi, %edi # sched: [2:1.00] -; ATOM-NEXT: shldl $7, %esi, (%rdx) # sched: [4:2.00] -; ATOM-NEXT: shrdl $7, %esi, (%rdx) # sched: [4:2.00] +; ATOM-NEXT: subb $7, %al # sched: [1:0.50] +; ATOM-NEXT: subb $7, %dil # sched: [1:0.50] +; ATOM-NEXT: subb $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: subb %dil, %dil # sched: [1:0.50] +; ATOM-NEXT: subb %dil, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: subb (%rsi), %dil # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_shld_shrd_32: +; SLM-LABEL: test_sub_8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: shldl %cl, %esi, %edi # sched: [1:1.00] -; SLM-NEXT: shrdl %cl, %esi, %edi # sched: [1:1.00] -; SLM-NEXT: shldl %cl, %esi, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrdl %cl, %esi, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shldl $7, %esi, %edi # sched: [1:1.00] -; SLM-NEXT: shrdl $7, %esi, %edi # sched: [1:1.00] -; SLM-NEXT: shldl $7, %esi, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrdl $7, %esi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: subb $7, %al # sched: [1:0.50] +; SLM-NEXT: subb $7, %dil # sched: [1:0.50] +; SLM-NEXT: subb $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: subb %dil, %dil # sched: [1:0.50] +; SLM-NEXT: subb %dil, (%rsi) # sched: [4:2.00] +; SLM-NEXT: subb (%rsi), %dil # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_shld_shrd_32: -; SANDY: # %bb.0: -; SANDY-NEXT: #APP -; SANDY-NEXT: shldl %cl, %esi, %edi # sched: [4:1.50] -; SANDY-NEXT: shrdl %cl, %esi, %edi # sched: [4:1.50] -; SANDY-NEXT: shldl %cl, %esi, (%rdx) # sched: [10:1.50] -; SANDY-NEXT: shrdl %cl, %esi, (%rdx) # sched: [10:1.50] -; SANDY-NEXT: shldl $7, %esi, %edi # sched: [2:0.67] -; SANDY-NEXT: shrdl $7, %esi, %edi # sched: [2:0.67] -; SANDY-NEXT: shldl $7, %esi, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: shrdl $7, %esi, (%rdx) # sched: [8:1.00] +; SANDY-LABEL: test_sub_8: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: subb $7, %al # sched: [1:0.33] +; SANDY-NEXT: subb $7, %dil # sched: [1:0.33] +; SANDY-NEXT: subb $7, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: subb %dil, %dil # sched: [1:0.33] +; SANDY-NEXT: subb %dil, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: subb (%rsi), %dil # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_shld_shrd_32: +; HASWELL-LABEL: test_sub_8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: shldl %cl, %esi, %edi # sched: [6:1.00] -; HASWELL-NEXT: shrdl %cl, %esi, %edi # sched: [6:1.00] -; HASWELL-NEXT: shldl %cl, %esi, (%rdx) # sched: [12:1.00] -; HASWELL-NEXT: shrdl %cl, %esi, (%rdx) # sched: [12:1.00] -; HASWELL-NEXT: shldl $7, %esi, %edi # sched: [3:1.00] -; HASWELL-NEXT: shrdl $7, %esi, %edi # sched: [3:1.00] -; HASWELL-NEXT: shldl $7, %esi, (%rdx) # sched: [10:1.00] -; HASWELL-NEXT: shrdl $7, %esi, (%rdx) # sched: [10:1.00] +; HASWELL-NEXT: subb $7, %al # sched: [1:0.25] +; HASWELL-NEXT: subb $7, %dil # sched: [1:0.25] +; HASWELL-NEXT: subb $7, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: subb %dil, %dil # sched: [1:0.25] +; HASWELL-NEXT: subb %dil, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: subb (%rsi), %dil # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_shld_shrd_32: +; BROADWELL-LABEL: test_sub_8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: shldl %cl, %esi, %edi # sched: [6:1.00] -; BROADWELL-NEXT: shrdl %cl, %esi, %edi # sched: [6:1.00] -; BROADWELL-NEXT: shldl %cl, %esi, (%rdx) # sched: [11:1.00] -; BROADWELL-NEXT: shrdl %cl, %esi, (%rdx) # sched: [11:1.00] -; BROADWELL-NEXT: shldl $7, %esi, %edi # sched: [3:1.00] -; BROADWELL-NEXT: shrdl $7, %esi, %edi # sched: [3:1.00] -; BROADWELL-NEXT: shldl $7, %esi, (%rdx) # sched: [9:1.00] -; BROADWELL-NEXT: shrdl $7, %esi, (%rdx) # sched: [9:1.00] +; BROADWELL-NEXT: subb $7, %al # sched: [1:0.25] +; BROADWELL-NEXT: subb $7, %dil # sched: [1:0.25] +; BROADWELL-NEXT: subb $7, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: subb %dil, %dil # sched: [1:0.25] +; BROADWELL-NEXT: subb %dil, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: subb (%rsi), %dil # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_shld_shrd_32: +; SKYLAKE-LABEL: test_sub_8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: shldl %cl, %esi, %edi # sched: [6:1.00] -; SKYLAKE-NEXT: shrdl %cl, %esi, %edi # sched: [6:1.00] -; SKYLAKE-NEXT: shldl %cl, %esi, (%rdx) # sched: [11:1.00] -; SKYLAKE-NEXT: shrdl %cl, %esi, (%rdx) # sched: [11:1.00] -; SKYLAKE-NEXT: shldl $7, %esi, %edi # sched: [3:1.00] -; SKYLAKE-NEXT: shrdl $7, %esi, %edi # sched: [3:1.00] -; SKYLAKE-NEXT: shldl $7, %esi, (%rdx) # sched: [9:1.00] -; SKYLAKE-NEXT: shrdl $7, %esi, (%rdx) # sched: [9:1.00] +; SKYLAKE-NEXT: subb $7, %al # sched: [1:0.25] +; SKYLAKE-NEXT: subb $7, %dil # sched: [1:0.25] +; SKYLAKE-NEXT: subb $7, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: subb %dil, %dil # sched: [1:0.25] +; SKYLAKE-NEXT: subb %dil, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: subb (%rsi), %dil # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_shld_shrd_32: +; SKX-LABEL: test_sub_8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: shldl %cl, %esi, %edi # sched: [6:1.00] -; SKX-NEXT: shrdl %cl, %esi, %edi # sched: [6:1.00] -; SKX-NEXT: shldl %cl, %esi, (%rdx) # sched: [11:1.00] -; SKX-NEXT: shrdl %cl, %esi, (%rdx) # sched: [11:1.00] -; SKX-NEXT: shldl $7, %esi, %edi # sched: [3:1.00] -; SKX-NEXT: shrdl $7, %esi, %edi # sched: [3:1.00] -; SKX-NEXT: shldl $7, %esi, (%rdx) # sched: [9:1.00] -; SKX-NEXT: shrdl $7, %esi, (%rdx) # sched: [9:1.00] +; SKX-NEXT: subb $7, %al # sched: [1:0.25] +; SKX-NEXT: subb $7, %dil # sched: [1:0.25] +; SKX-NEXT: subb $7, (%rsi) # sched: [6:1.00] +; SKX-NEXT: subb %dil, %dil # sched: [1:0.25] +; SKX-NEXT: subb %dil, (%rsi) # sched: [6:1.00] +; SKX-NEXT: subb (%rsi), %dil # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_shld_shrd_32: +; BTVER2-LABEL: test_sub_8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: shldl %cl, %esi, %edi # sched: [4:4.00] -; BTVER2-NEXT: shrdl %cl, %esi, %edi # sched: [4:4.00] -; BTVER2-NEXT: shldl %cl, %esi, (%rdx) # sched: [9:11.00] -; BTVER2-NEXT: shrdl %cl, %esi, (%rdx) # sched: [9:11.00] -; BTVER2-NEXT: shldl $7, %esi, %edi # sched: [3:3.00] -; BTVER2-NEXT: shrdl $7, %esi, %edi # sched: [3:3.00] -; BTVER2-NEXT: shldl $7, %esi, (%rdx) # sched: [9:11.00] -; BTVER2-NEXT: shrdl $7, %esi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: subb $7, %al # sched: [1:0.50] +; BTVER2-NEXT: subb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: subb $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: subb %dil, %dil # sched: [1:0.50] +; BTVER2-NEXT: subb %dil, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: subb (%rsi), %dil # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_shld_shrd_32: +; ZNVER1-LABEL: test_sub_8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: shldl %cl, %esi, %edi # sched: [100:?] -; ZNVER1-NEXT: shrdl %cl, %esi, %edi # sched: [100:?] -; ZNVER1-NEXT: shldl %cl, %esi, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: shrdl %cl, %esi, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: shldl $7, %esi, %edi # sched: [1:0.25] -; ZNVER1-NEXT: shrdl $7, %esi, %edi # sched: [1:0.25] -; ZNVER1-NEXT: shldl $7, %esi, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrdl $7, %esi, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: subb $7, %al # sched: [1:0.25] +; ZNVER1-NEXT: subb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: subb $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: subb %dil, %dil # sched: [1:0.25] +; ZNVER1-NEXT: subb %dil, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: subb (%rsi), %dil # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "shld $1, $0 \0A\09 shrd $1, $0 \0A\09 shld $1, $2 \0A\09 shrd $1, $2 \0A\09 shld $3, $1, $0 \0A\09 shrd $3, $1, $0 \0A\09 shld $3, $1, $2 \0A\09 shrd $3, $1, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7) + tail call void asm "subb $2, %AL \0A\09 subb $2, $0 \0A\09 subb $2, $1 \0A\09 subb $0, $0 \0A\09 subb $0, $1 \0A\09 subb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind ret void } -define void @test_shld_shrd_64(i64 %a0, i64 %a1, i64 *%a2) optsize { -; GENERIC-LABEL: test_shld_shrd_64: +define void @test_sub_16(i16 %a0, i16* %a1) optsize { +; GENERIC-LABEL: test_sub_16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: shldq %cl, %rsi, %rdi # sched: [4:1.50] -; GENERIC-NEXT: shrdq %cl, %rsi, %rdi # sched: [4:1.50] -; GENERIC-NEXT: shldq %cl, %rsi, (%rdx) # sched: [10:1.50] -; GENERIC-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [10:1.50] -; GENERIC-NEXT: shldq $7, %rsi, %rdi # sched: [2:0.67] -; GENERIC-NEXT: shrdq $7, %rsi, %rdi # sched: [2:0.67] -; GENERIC-NEXT: shldq $7, %rsi, (%rdx) # sched: [8:1.00] -; GENERIC-NEXT: shrdq $7, %rsi, (%rdx) # sched: [8:1.00] +; GENERIC-NEXT: subw $511, %ax # imm = 0x1FF +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: subw $511, %di # imm = 0x1FF +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: subw $511, (%rsi) # imm = 0x1FF +; GENERIC-NEXT: # sched: [7:1.00] +; GENERIC-NEXT: subw $7, %di # sched: [1:0.33] +; GENERIC-NEXT: subw $7, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: subw %di, %di # sched: [1:0.33] +; GENERIC-NEXT: subw %di, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: subw (%rsi), %di # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_shld_shrd_64: +; ATOM-LABEL: test_sub_16: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: shldq %cl, %rsi, %rdi # sched: [8:4.00] -; ATOM-NEXT: shrdq %cl, %rsi, %rdi # sched: [8:4.00] -; ATOM-NEXT: shldq %cl, %rsi, (%rdx) # sched: [9:4.50] -; ATOM-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [9:4.50] -; ATOM-NEXT: shldq $7, %rsi, %rdi # sched: [9:4.50] -; ATOM-NEXT: shrdq $7, %rsi, %rdi # sched: [9:4.50] -; ATOM-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:4.50] -; ATOM-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:4.50] +; ATOM-NEXT: subw $511, %ax # imm = 0x1FF +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: subw $511, %di # imm = 0x1FF +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: subw $511, (%rsi) # imm = 0x1FF +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: subw $7, %di # sched: [1:0.50] +; ATOM-NEXT: subw $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: subw %di, %di # sched: [1:0.50] +; ATOM-NEXT: subw %di, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: subw (%rsi), %di # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_shld_shrd_64: +; SLM-LABEL: test_sub_16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: shldq %cl, %rsi, %rdi # sched: [1:1.00] -; SLM-NEXT: shrdq %cl, %rsi, %rdi # sched: [1:1.00] -; SLM-NEXT: shldq %cl, %rsi, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shldq $7, %rsi, %rdi # sched: [1:1.00] -; SLM-NEXT: shrdq $7, %rsi, %rdi # sched: [1:1.00] -; SLM-NEXT: shldq $7, %rsi, (%rdx) # sched: [4:2.00] -; SLM-NEXT: shrdq $7, %rsi, (%rdx) # sched: [4:2.00] +; SLM-NEXT: subw $511, %ax # imm = 0x1FF +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: subw $511, %di # imm = 0x1FF +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: subw $511, (%rsi) # imm = 0x1FF +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: subw $7, %di # sched: [1:0.50] +; SLM-NEXT: subw $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: subw %di, %di # sched: [1:0.50] +; SLM-NEXT: subw %di, (%rsi) # sched: [4:2.00] +; SLM-NEXT: subw (%rsi), %di # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_shld_shrd_64: +; SANDY-LABEL: test_sub_16: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: shldq %cl, %rsi, %rdi # sched: [4:1.50] -; SANDY-NEXT: shrdq %cl, %rsi, %rdi # sched: [4:1.50] -; SANDY-NEXT: shldq %cl, %rsi, (%rdx) # sched: [10:1.50] -; SANDY-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [10:1.50] -; SANDY-NEXT: shldq $7, %rsi, %rdi # sched: [2:0.67] -; SANDY-NEXT: shrdq $7, %rsi, %rdi # sched: [2:0.67] -; SANDY-NEXT: shldq $7, %rsi, (%rdx) # sched: [8:1.00] -; SANDY-NEXT: shrdq $7, %rsi, (%rdx) # sched: [8:1.00] +; SANDY-NEXT: subw $511, %ax # imm = 0x1FF +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: subw $511, %di # imm = 0x1FF +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: subw $511, (%rsi) # imm = 0x1FF +; SANDY-NEXT: # sched: [7:1.00] +; SANDY-NEXT: subw $7, %di # sched: [1:0.33] +; SANDY-NEXT: subw $7, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: subw %di, %di # sched: [1:0.33] +; SANDY-NEXT: subw %di, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: subw (%rsi), %di # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_shld_shrd_64: +; HASWELL-LABEL: test_sub_16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: shldq %cl, %rsi, %rdi # sched: [6:1.00] -; HASWELL-NEXT: shrdq %cl, %rsi, %rdi # sched: [6:1.00] -; HASWELL-NEXT: shldq %cl, %rsi, (%rdx) # sched: [12:1.00] -; HASWELL-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [12:1.00] -; HASWELL-NEXT: shldq $7, %rsi, %rdi # sched: [3:1.00] -; HASWELL-NEXT: shrdq $7, %rsi, %rdi # sched: [3:1.00] -; HASWELL-NEXT: shldq $7, %rsi, (%rdx) # sched: [10:1.00] -; HASWELL-NEXT: shrdq $7, %rsi, (%rdx) # sched: [10:1.00] +; HASWELL-NEXT: subw $511, %ax # imm = 0x1FF +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: subw $511, %di # imm = 0x1FF +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: subw $511, (%rsi) # imm = 0x1FF +; HASWELL-NEXT: # sched: [7:1.00] +; HASWELL-NEXT: subw $7, %di # sched: [1:0.25] +; HASWELL-NEXT: subw $7, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: subw %di, %di # sched: [1:0.25] +; HASWELL-NEXT: subw %di, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: subw (%rsi), %di # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_shld_shrd_64: +; BROADWELL-LABEL: test_sub_16: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: shldq %cl, %rsi, %rdi # sched: [6:1.00] -; BROADWELL-NEXT: shrdq %cl, %rsi, %rdi # sched: [6:1.00] -; BROADWELL-NEXT: shldq %cl, %rsi, (%rdx) # sched: [11:1.00] -; BROADWELL-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [11:1.00] -; BROADWELL-NEXT: shldq $7, %rsi, %rdi # sched: [3:1.00] -; BROADWELL-NEXT: shrdq $7, %rsi, %rdi # sched: [3:1.00] -; BROADWELL-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:1.00] -; BROADWELL-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:1.00] +; BROADWELL-NEXT: subw $511, %ax # imm = 0x1FF +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: subw $511, %di # imm = 0x1FF +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: subw $511, (%rsi) # imm = 0x1FF +; BROADWELL-NEXT: # sched: [6:1.00] +; BROADWELL-NEXT: subw $7, %di # sched: [1:0.25] +; BROADWELL-NEXT: subw $7, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: subw %di, %di # sched: [1:0.25] +; BROADWELL-NEXT: subw %di, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: subw (%rsi), %di # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_shld_shrd_64: +; SKYLAKE-LABEL: test_sub_16: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: shldq %cl, %rsi, %rdi # sched: [6:1.00] -; SKYLAKE-NEXT: shrdq %cl, %rsi, %rdi # sched: [6:1.00] -; SKYLAKE-NEXT: shldq %cl, %rsi, (%rdx) # sched: [11:1.00] -; SKYLAKE-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [11:1.00] -; SKYLAKE-NEXT: shldq $7, %rsi, %rdi # sched: [3:1.00] -; SKYLAKE-NEXT: shrdq $7, %rsi, %rdi # sched: [3:1.00] -; SKYLAKE-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:1.00] -; SKYLAKE-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:1.00] +; SKYLAKE-NEXT: subw $511, %ax # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: subw $511, %di # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: subw $511, (%rsi) # imm = 0x1FF +; SKYLAKE-NEXT: # sched: [6:1.00] +; SKYLAKE-NEXT: subw $7, %di # sched: [1:0.25] +; SKYLAKE-NEXT: subw $7, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: subw %di, %di # sched: [1:0.25] +; SKYLAKE-NEXT: subw %di, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: subw (%rsi), %di # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_shld_shrd_64: +; SKX-LABEL: test_sub_16: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: shldq %cl, %rsi, %rdi # sched: [6:1.00] -; SKX-NEXT: shrdq %cl, %rsi, %rdi # sched: [6:1.00] -; SKX-NEXT: shldq %cl, %rsi, (%rdx) # sched: [11:1.00] -; SKX-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [11:1.00] -; SKX-NEXT: shldq $7, %rsi, %rdi # sched: [3:1.00] -; SKX-NEXT: shrdq $7, %rsi, %rdi # sched: [3:1.00] -; SKX-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:1.00] -; SKX-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:1.00] +; SKX-NEXT: subw $511, %ax # imm = 0x1FF +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: subw $511, %di # imm = 0x1FF +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: subw $511, (%rsi) # imm = 0x1FF +; SKX-NEXT: # sched: [6:1.00] +; SKX-NEXT: subw $7, %di # sched: [1:0.25] +; SKX-NEXT: subw $7, (%rsi) # sched: [6:1.00] +; SKX-NEXT: subw %di, %di # sched: [1:0.25] +; SKX-NEXT: subw %di, (%rsi) # sched: [6:1.00] +; SKX-NEXT: subw (%rsi), %di # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_shld_shrd_64: +; BTVER2-LABEL: test_sub_16: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: shldq %cl, %rsi, %rdi # sched: [4:4.00] -; BTVER2-NEXT: shrdq %cl, %rsi, %rdi # sched: [4:4.00] -; BTVER2-NEXT: shldq %cl, %rsi, (%rdx) # sched: [9:11.00] -; BTVER2-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [9:11.00] -; BTVER2-NEXT: shldq $7, %rsi, %rdi # sched: [3:3.00] -; BTVER2-NEXT: shrdq $7, %rsi, %rdi # sched: [3:3.00] -; BTVER2-NEXT: shldq $7, %rsi, (%rdx) # sched: [9:11.00] -; BTVER2-NEXT: shrdq $7, %rsi, (%rdx) # sched: [9:11.00] +; BTVER2-NEXT: subw $511, %ax # imm = 0x1FF +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: subw $511, %di # imm = 0x1FF +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: subw $511, (%rsi) # imm = 0x1FF +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: subw $7, %di # sched: [1:0.50] +; BTVER2-NEXT: subw $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: subw %di, %di # sched: [1:0.50] +; BTVER2-NEXT: subw %di, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: subw (%rsi), %di # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_shld_shrd_64: +; ZNVER1-LABEL: test_sub_16: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: shldq %cl, %rsi, %rdi # sched: [100:?] -; ZNVER1-NEXT: shrdq %cl, %rsi, %rdi # sched: [100:?] -; ZNVER1-NEXT: shldq %cl, %rsi, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: shrdq %cl, %rsi, (%rdx) # sched: [100:?] -; ZNVER1-NEXT: shldq $7, %rsi, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: shrdq $7, %rsi, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: shldq $7, %rsi, (%rdx) # sched: [5:0.50] -; ZNVER1-NEXT: shrdq $7, %rsi, (%rdx) # sched: [5:0.50] +; ZNVER1-NEXT: subw $511, %ax # imm = 0x1FF +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: subw $511, %di # imm = 0x1FF +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: subw $511, (%rsi) # imm = 0x1FF +; ZNVER1-NEXT: # sched: [5:0.50] +; ZNVER1-NEXT: subw $7, %di # sched: [1:0.25] +; ZNVER1-NEXT: subw $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: subw %di, %di # sched: [1:0.25] +; ZNVER1-NEXT: subw %di, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: subw (%rsi), %di # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "shld $1, $0 \0A\09 shrd $1, $0 \0A\09 shld $1, $2 \0A\09 shrd $1, $2 \0A\09 shld $3, $1, $0 \0A\09 shrd $3, $1, $0 \0A\09 shld $3, $1, $2 \0A\09 shrd $3, $1, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7) + tail call void asm "subw $2, %AX \0A\09 subw $2, $0 \0A\09 subw $2, $1 \0A\09 subw $3, $0 \0A\09 subw $3, $1 \0A\09 subw $0, $0 \0A\09 subw $0, $1 \0A\09 subw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind ret void } - -define void @test_stc_std() optsize { -; GENERIC-LABEL: test_stc_std: +define void @test_sub_32(i32 %a0, i32* %a1) optsize { +; GENERIC-LABEL: test_sub_32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: stc # sched: [1:0.33] -; GENERIC-NEXT: std # sched: [1:0.33] +; GENERIC-NEXT: subl $665536, %eax # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: subl $665536, %edi # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [7:1.00] +; GENERIC-NEXT: subl $7, %edi # sched: [1:0.33] +; GENERIC-NEXT: subl $7, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: subl %edi, %edi # sched: [1:0.33] +; GENERIC-NEXT: subl %edi, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: subl (%rsi), %edi # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_stc_std: +; ATOM-LABEL: test_sub_32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: stc # sched: [1:0.50] -; ATOM-NEXT: std # sched: [21:10.50] +; ATOM-NEXT: subl $665536, %eax # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: subl $665536, %edi # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: subl $7, %edi # sched: [1:0.50] +; ATOM-NEXT: subl $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: subl %edi, %edi # sched: [1:0.50] +; ATOM-NEXT: subl %edi, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: subl (%rsi), %edi # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_stc_std: +; SLM-LABEL: test_sub_32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: stc # sched: [1:0.50] -; SLM-NEXT: std # sched: [1:0.50] +; SLM-NEXT: subl $665536, %eax # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: subl $665536, %edi # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: subl $7, %edi # sched: [1:0.50] +; SLM-NEXT: subl $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: subl %edi, %edi # sched: [1:0.50] +; SLM-NEXT: subl %edi, (%rsi) # sched: [4:2.00] +; SLM-NEXT: subl (%rsi), %edi # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_stc_std: +; SANDY-LABEL: test_sub_32: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: stc # sched: [1:0.33] -; SANDY-NEXT: std # sched: [1:0.33] +; SANDY-NEXT: subl $665536, %eax # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: subl $665536, %edi # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [7:1.00] +; SANDY-NEXT: subl $7, %edi # sched: [1:0.33] +; SANDY-NEXT: subl $7, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: subl %edi, %edi # sched: [1:0.33] +; SANDY-NEXT: subl %edi, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: subl (%rsi), %edi # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_stc_std: +; HASWELL-LABEL: test_sub_32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: stc # sched: [1:0.25] -; HASWELL-NEXT: std # sched: [6:1.50] +; HASWELL-NEXT: subl $665536, %eax # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: subl $665536, %edi # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [7:1.00] +; HASWELL-NEXT: subl $7, %edi # sched: [1:0.25] +; HASWELL-NEXT: subl $7, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: subl %edi, %edi # sched: [1:0.25] +; HASWELL-NEXT: subl %edi, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: subl (%rsi), %edi # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_stc_std: +; BROADWELL-LABEL: test_sub_32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: stc # sched: [1:0.25] -; BROADWELL-NEXT: std # sched: [6:1.50] +; BROADWELL-NEXT: subl $665536, %eax # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: subl $665536, %edi # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [6:1.00] +; BROADWELL-NEXT: subl $7, %edi # sched: [1:0.25] +; BROADWELL-NEXT: subl $7, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: subl %edi, %edi # sched: [1:0.25] +; BROADWELL-NEXT: subl %edi, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: subl (%rsi), %edi # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_stc_std: +; SKYLAKE-LABEL: test_sub_32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: stc # sched: [1:0.25] -; SKYLAKE-NEXT: std # sched: [6:1.50] +; SKYLAKE-NEXT: subl $665536, %eax # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: subl $665536, %edi # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [6:1.00] +; SKYLAKE-NEXT: subl $7, %edi # sched: [1:0.25] +; SKYLAKE-NEXT: subl $7, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: subl %edi, %edi # sched: [1:0.25] +; SKYLAKE-NEXT: subl %edi, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: subl (%rsi), %edi # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_stc_std: +; SKX-LABEL: test_sub_32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: stc # sched: [1:0.25] -; SKX-NEXT: std # sched: [6:1.50] +; SKX-NEXT: subl $665536, %eax # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: subl $665536, %edi # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: # sched: [6:1.00] +; SKX-NEXT: subl $7, %edi # sched: [1:0.25] +; SKX-NEXT: subl $7, (%rsi) # sched: [6:1.00] +; SKX-NEXT: subl %edi, %edi # sched: [1:0.25] +; SKX-NEXT: subl %edi, (%rsi) # sched: [6:1.00] +; SKX-NEXT: subl (%rsi), %edi # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_stc_std: +; BTVER2-LABEL: test_sub_32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: stc # sched: [1:0.50] -; BTVER2-NEXT: std # sched: [1:0.50] +; BTVER2-NEXT: subl $665536, %eax # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: subl $665536, %edi # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: subl $7, %edi # sched: [1:0.50] +; BTVER2-NEXT: subl $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: subl %edi, %edi # sched: [1:0.50] +; BTVER2-NEXT: subl %edi, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: subl (%rsi), %edi # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_stc_std: +; ZNVER1-LABEL: test_sub_32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: stc # sched: [1:0.25] -; ZNVER1-NEXT: std # sched: [1:0.25] +; ZNVER1-NEXT: subl $665536, %eax # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: subl $665536, %edi # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:0.50] +; ZNVER1-NEXT: subl $7, %edi # sched: [1:0.25] +; ZNVER1-NEXT: subl $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: subl %edi, %edi # sched: [1:0.25] +; ZNVER1-NEXT: subl %edi, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: subl (%rsi), %edi # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "stc \0A\09 std", ""() + tail call void asm "subl $2, %EAX \0A\09 subl $2, $0 \0A\09 subl $2, $1 \0A\09 subl $3, $0 \0A\09 subl $3, $1 \0A\09 subl $0, $0 \0A\09 subl $0, $1 \0A\09 subl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind ret void } - -define void @test_stos() optsize { -; GENERIC-LABEL: test_stos: +define void @test_sub_64(i64 %a0, i64* %a1) optsize { +; GENERIC-LABEL: test_sub_64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: stosb %al, %es:(%rdi) # sched: [5:1.00] -; GENERIC-NEXT: stosw %ax, %es:(%rdi) # sched: [5:1.00] -; GENERIC-NEXT: stosl %eax, %es:(%rdi) # sched: [5:1.00] -; GENERIC-NEXT: stosq %rax, %es:(%rdi) # sched: [5:1.00] +; GENERIC-NEXT: subq $665536, %rax # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [1:0.33] +; GENERIC-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [7:1.00] +; GENERIC-NEXT: subq $7, %rdi # sched: [1:0.33] +; GENERIC-NEXT: subq $7, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: subq %rdi, %rdi # sched: [1:0.33] +; GENERIC-NEXT: subq %rdi, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: subq (%rsi), %rdi # sched: [6:0.50] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_stos: +; ATOM-LABEL: test_sub_64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: stosb %al, %es:(%rdi) # sched: [1:0.50] -; ATOM-NEXT: stosw %ax, %es:(%rdi) # sched: [1:0.50] -; ATOM-NEXT: stosl %eax, %es:(%rdi) # sched: [1:0.50] -; ATOM-NEXT: stosq %rax, %es:(%rdi) # sched: [1:0.50] +; ATOM-NEXT: subq $665536, %rax # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:0.50] +; ATOM-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: # sched: [1:1.00] +; ATOM-NEXT: subq $7, %rdi # sched: [1:0.50] +; ATOM-NEXT: subq $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: subq %rdi, %rdi # sched: [1:0.50] +; ATOM-NEXT: subq %rdi, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: subq (%rsi), %rdi # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_stos: +; SLM-LABEL: test_sub_64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: stosb %al, %es:(%rdi) # sched: [100:1.00] -; SLM-NEXT: stosw %ax, %es:(%rdi) # sched: [100:1.00] -; SLM-NEXT: stosl %eax, %es:(%rdi) # sched: [100:1.00] -; SLM-NEXT: stosq %rax, %es:(%rdi) # sched: [100:1.00] +; SLM-NEXT: subq $665536, %rax # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; SLM-NEXT: # sched: [1:0.50] +; SLM-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: # sched: [4:2.00] +; SLM-NEXT: subq $7, %rdi # sched: [1:0.50] +; SLM-NEXT: subq $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: subq %rdi, %rdi # sched: [1:0.50] +; SLM-NEXT: subq %rdi, (%rsi) # sched: [4:2.00] +; SLM-NEXT: subq (%rsi), %rdi # sched: [4:1.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_stos: +; SANDY-LABEL: test_sub_64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: stosb %al, %es:(%rdi) # sched: [5:1.00] -; SANDY-NEXT: stosw %ax, %es:(%rdi) # sched: [5:1.00] -; SANDY-NEXT: stosl %eax, %es:(%rdi) # sched: [5:1.00] -; SANDY-NEXT: stosq %rax, %es:(%rdi) # sched: [5:1.00] +; SANDY-NEXT: subq $665536, %rax # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [7:1.00] +; SANDY-NEXT: subq $7, %rdi # sched: [1:0.33] +; SANDY-NEXT: subq $7, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: subq %rdi, %rdi # sched: [1:0.33] +; SANDY-NEXT: subq %rdi, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: subq (%rsi), %rdi # sched: [6:0.50] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_stos: +; HASWELL-LABEL: test_sub_64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: stosb %al, %es:(%rdi) # sched: [2:1.00] -; HASWELL-NEXT: stosw %ax, %es:(%rdi) # sched: [2:1.00] -; HASWELL-NEXT: stosl %eax, %es:(%rdi) # sched: [2:1.00] -; HASWELL-NEXT: stosq %rax, %es:(%rdi) # sched: [2:1.00] +; HASWELL-NEXT: subq $665536, %rax # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [1:0.25] +; HASWELL-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [7:1.00] +; HASWELL-NEXT: subq $7, %rdi # sched: [1:0.25] +; HASWELL-NEXT: subq $7, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: subq %rdi, %rdi # sched: [1:0.25] +; HASWELL-NEXT: subq %rdi, (%rsi) # sched: [7:1.00] +; HASWELL-NEXT: subq (%rsi), %rdi # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_stos: +; BROADWELL-LABEL: test_sub_64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: stosb %al, %es:(%rdi) # sched: [2:1.00] -; BROADWELL-NEXT: stosw %ax, %es:(%rdi) # sched: [2:1.00] -; BROADWELL-NEXT: stosl %eax, %es:(%rdi) # sched: [2:1.00] -; BROADWELL-NEXT: stosq %rax, %es:(%rdi) # sched: [2:1.00] +; BROADWELL-NEXT: subq $665536, %rax # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [1:0.25] +; BROADWELL-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: # sched: [6:1.00] +; BROADWELL-NEXT: subq $7, %rdi # sched: [1:0.25] +; BROADWELL-NEXT: subq $7, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: subq %rdi, %rdi # sched: [1:0.25] +; BROADWELL-NEXT: subq %rdi, (%rsi) # sched: [6:1.00] +; BROADWELL-NEXT: subq (%rsi), %rdi # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_stos: +; SKYLAKE-LABEL: test_sub_64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: stosb %al, %es:(%rdi) # sched: [2:1.00] -; SKYLAKE-NEXT: stosw %ax, %es:(%rdi) # sched: [2:1.00] -; SKYLAKE-NEXT: stosl %eax, %es:(%rdi) # sched: [2:1.00] -; SKYLAKE-NEXT: stosq %rax, %es:(%rdi) # sched: [2:1.00] +; SKYLAKE-NEXT: subq $665536, %rax # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [1:0.25] +; SKYLAKE-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: # sched: [6:1.00] +; SKYLAKE-NEXT: subq $7, %rdi # sched: [1:0.25] +; SKYLAKE-NEXT: subq $7, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: subq %rdi, %rdi # sched: [1:0.25] +; SKYLAKE-NEXT: subq %rdi, (%rsi) # sched: [6:1.00] +; SKYLAKE-NEXT: subq (%rsi), %rdi # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_stos: +; SKX-LABEL: test_sub_64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: stosb %al, %es:(%rdi) # sched: [2:1.00] -; SKX-NEXT: stosw %ax, %es:(%rdi) # sched: [2:1.00] -; SKX-NEXT: stosl %eax, %es:(%rdi) # sched: [2:1.00] -; SKX-NEXT: stosq %rax, %es:(%rdi) # sched: [2:1.00] +; SKX-NEXT: subq $665536, %rax # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; SKX-NEXT: # sched: [1:0.25] +; SKX-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: # sched: [6:1.00] +; SKX-NEXT: subq $7, %rdi # sched: [1:0.25] +; SKX-NEXT: subq $7, (%rsi) # sched: [6:1.00] +; SKX-NEXT: subq %rdi, %rdi # sched: [1:0.25] +; SKX-NEXT: subq %rdi, (%rsi) # sched: [6:1.00] +; SKX-NEXT: subq (%rsi), %rdi # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_stos: +; BTVER2-LABEL: test_sub_64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: stosb %al, %es:(%rdi) # sched: [100:0.17] -; BTVER2-NEXT: stosw %ax, %es:(%rdi) # sched: [100:0.17] -; BTVER2-NEXT: stosl %eax, %es:(%rdi) # sched: [100:0.17] -; BTVER2-NEXT: stosq %rax, %es:(%rdi) # sched: [100:0.17] +; BTVER2-NEXT: subq $665536, %rax # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [1:0.50] +; BTVER2-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: # sched: [4:1.00] +; BTVER2-NEXT: subq $7, %rdi # sched: [1:0.50] +; BTVER2-NEXT: subq $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: subq %rdi, %rdi # sched: [1:0.50] +; BTVER2-NEXT: subq %rdi, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: subq (%rsi), %rdi # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_stos: +; ZNVER1-LABEL: test_sub_64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: stosb %al, %es:(%rdi) # sched: [100:?] -; ZNVER1-NEXT: stosw %ax, %es:(%rdi) # sched: [100:?] -; ZNVER1-NEXT: stosl %eax, %es:(%rdi) # sched: [100:?] -; ZNVER1-NEXT: stosq %rax, %es:(%rdi) # sched: [100:?] +; ZNVER1-NEXT: subq $665536, %rax # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [1:0.25] +; ZNVER1-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:0.50] +; ZNVER1-NEXT: subq $7, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: subq $7, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: subq %rdi, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: subq %rdi, (%rsi) # sched: [5:0.50] +; ZNVER1-NEXT: subq (%rsi), %rdi # sched: [5:0.50] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - call void asm sideeffect "stosb \0A\09 stosw \0A\09 stosl \0A\09 stosq", ""() + tail call void asm "subq $2, %RAX \0A\09 subq $2, $0 \0A\09 subq $2, $1 \0A\09 subq $3, $0 \0A\09 subq $3, $1 \0A\09 subq $0, $0 \0A\09 subq $0, $1 \0A\09 subq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind ret void } -define void @test_sub_8(i8 %a0, i8* %a1) optsize { -; GENERIC-LABEL: test_sub_8: +define void @test_test_8(i8 %a0, i8* %a1) optsize { +; GENERIC-LABEL: test_test_8: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: subb $7, %al # sched: [1:0.33] -; GENERIC-NEXT: subb $7, %dil # sched: [1:0.33] -; GENERIC-NEXT: subb $7, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: subb %dil, %dil # sched: [1:0.33] -; GENERIC-NEXT: subb %dil, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: subb (%rsi), %dil # sched: [6:0.50] +; GENERIC-NEXT: testb $7, %al # sched: [1:0.33] +; GENERIC-NEXT: testb $7, %dil # sched: [1:0.33] +; GENERIC-NEXT: testb $7, (%rsi) # sched: [7:1.00] +; GENERIC-NEXT: testb %dil, %dil # sched: [1:0.33] +; GENERIC-NEXT: testb %dil, (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sub_8: +; ATOM-LABEL: test_test_8: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: subb $7, %al # sched: [1:0.50] -; ATOM-NEXT: subb $7, %dil # sched: [1:0.50] -; ATOM-NEXT: subb $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: subb %dil, %dil # sched: [1:0.50] -; ATOM-NEXT: subb %dil, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: subb (%rsi), %dil # sched: [1:1.00] +; ATOM-NEXT: testb $7, %al # sched: [1:0.50] +; ATOM-NEXT: testb $7, %dil # sched: [1:0.50] +; ATOM-NEXT: testb $7, (%rsi) # sched: [1:1.00] +; ATOM-NEXT: testb %dil, %dil # sched: [1:0.50] +; ATOM-NEXT: testb %dil, (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sub_8: +; SLM-LABEL: test_test_8: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: subb $7, %al # sched: [1:0.50] -; SLM-NEXT: subb $7, %dil # sched: [1:0.50] -; SLM-NEXT: subb $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: subb %dil, %dil # sched: [1:0.50] -; SLM-NEXT: subb %dil, (%rsi) # sched: [4:2.00] -; SLM-NEXT: subb (%rsi), %dil # sched: [4:1.00] +; SLM-NEXT: testb $7, %al # sched: [1:0.50] +; SLM-NEXT: testb $7, %dil # sched: [1:0.50] +; SLM-NEXT: testb $7, (%rsi) # sched: [4:2.00] +; SLM-NEXT: testb %dil, %dil # sched: [1:0.50] +; SLM-NEXT: testb %dil, (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sub_8: +; SANDY-LABEL: test_test_8: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: subb $7, %al # sched: [1:0.33] -; SANDY-NEXT: subb $7, %dil # sched: [1:0.33] -; SANDY-NEXT: subb $7, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: subb %dil, %dil # sched: [1:0.33] -; SANDY-NEXT: subb %dil, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: subb (%rsi), %dil # sched: [6:0.50] +; SANDY-NEXT: testb $7, %al # sched: [1:0.33] +; SANDY-NEXT: testb $7, %dil # sched: [1:0.33] +; SANDY-NEXT: testb $7, (%rsi) # sched: [7:1.00] +; SANDY-NEXT: testb %dil, %dil # sched: [1:0.33] +; SANDY-NEXT: testb %dil, (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sub_8: +; HASWELL-LABEL: test_test_8: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: subb $7, %al # sched: [1:0.25] -; HASWELL-NEXT: subb $7, %dil # sched: [1:0.25] -; HASWELL-NEXT: subb $7, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: subb %dil, %dil # sched: [1:0.25] -; HASWELL-NEXT: subb %dil, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: subb (%rsi), %dil # sched: [6:0.50] +; HASWELL-NEXT: testb $7, %al # sched: [1:0.25] +; HASWELL-NEXT: testb $7, %dil # sched: [1:0.25] +; HASWELL-NEXT: testb $7, (%rsi) # sched: [6:0.50] +; HASWELL-NEXT: testb %dil, %dil # sched: [1:0.25] +; HASWELL-NEXT: testb %dil, (%rsi) # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sub_8: +; BROADWELL-LABEL: test_test_8: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: subb $7, %al # sched: [1:0.25] -; BROADWELL-NEXT: subb $7, %dil # sched: [1:0.25] -; BROADWELL-NEXT: subb $7, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: subb %dil, %dil # sched: [1:0.25] -; BROADWELL-NEXT: subb %dil, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: subb (%rsi), %dil # sched: [6:0.50] +; BROADWELL-NEXT: testb $7, %al # sched: [1:0.25] +; BROADWELL-NEXT: testb $7, %dil # sched: [1:0.25] +; BROADWELL-NEXT: testb $7, (%rsi) # sched: [6:0.50] +; BROADWELL-NEXT: testb %dil, %dil # sched: [1:0.25] +; BROADWELL-NEXT: testb %dil, (%rsi) # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sub_8: +; SKYLAKE-LABEL: test_test_8: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: subb $7, %al # sched: [1:0.25] -; SKYLAKE-NEXT: subb $7, %dil # sched: [1:0.25] -; SKYLAKE-NEXT: subb $7, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: subb %dil, %dil # sched: [1:0.25] -; SKYLAKE-NEXT: subb %dil, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: subb (%rsi), %dil # sched: [6:0.50] +; SKYLAKE-NEXT: testb $7, %al # sched: [1:0.25] +; SKYLAKE-NEXT: testb $7, %dil # sched: [1:0.25] +; SKYLAKE-NEXT: testb $7, (%rsi) # sched: [6:0.50] +; SKYLAKE-NEXT: testb %dil, %dil # sched: [1:0.25] +; SKYLAKE-NEXT: testb %dil, (%rsi) # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sub_8: +; SKX-LABEL: test_test_8: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: subb $7, %al # sched: [1:0.25] -; SKX-NEXT: subb $7, %dil # sched: [1:0.25] -; SKX-NEXT: subb $7, (%rsi) # sched: [6:1.00] -; SKX-NEXT: subb %dil, %dil # sched: [1:0.25] -; SKX-NEXT: subb %dil, (%rsi) # sched: [6:1.00] -; SKX-NEXT: subb (%rsi), %dil # sched: [6:0.50] +; SKX-NEXT: testb $7, %al # sched: [1:0.25] +; SKX-NEXT: testb $7, %dil # sched: [1:0.25] +; SKX-NEXT: testb $7, (%rsi) # sched: [6:0.50] +; SKX-NEXT: testb %dil, %dil # sched: [1:0.25] +; SKX-NEXT: testb %dil, (%rsi) # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sub_8: +; BTVER2-LABEL: test_test_8: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: subb $7, %al # sched: [1:0.50] -; BTVER2-NEXT: subb $7, %dil # sched: [1:0.50] -; BTVER2-NEXT: subb $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: subb %dil, %dil # sched: [1:0.50] -; BTVER2-NEXT: subb %dil, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: subb (%rsi), %dil # sched: [4:1.00] +; BTVER2-NEXT: testb $7, %al # sched: [1:0.50] +; BTVER2-NEXT: testb $7, %dil # sched: [1:0.50] +; BTVER2-NEXT: testb $7, (%rsi) # sched: [4:1.00] +; BTVER2-NEXT: testb %dil, %dil # sched: [1:0.50] +; BTVER2-NEXT: testb %dil, (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sub_8: +; ZNVER1-LABEL: test_test_8: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: subb $7, %al # sched: [1:0.25] -; ZNVER1-NEXT: subb $7, %dil # sched: [1:0.25] -; ZNVER1-NEXT: subb $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: subb %dil, %dil # sched: [1:0.25] -; ZNVER1-NEXT: subb %dil, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: subb (%rsi), %dil # sched: [5:0.50] +; ZNVER1-NEXT: testb $7, %al # sched: [1:0.25] +; ZNVER1-NEXT: testb $7, %dil # sched: [1:0.25] +; ZNVER1-NEXT: testb $7, (%rsi) # sched: [5:1.00] +; ZNVER1-NEXT: testb %dil, %dil # sched: [1:0.25] +; ZNVER1-NEXT: testb %dil, (%rsi) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "subb $2, %AL \0A\09 subb $2, $0 \0A\09 subb $2, $1 \0A\09 subb $0, $0 \0A\09 subb $0, $1 \0A\09 subb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind + tail call void asm "testb $2, %AL \0A\09 testb $2, $0 \0A\09 testb $2, $1 \0A\09 testb $0, $0 \0A\09 testb $0, $1", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind ret void } -define void @test_sub_16(i16 %a0, i16* %a1) optsize { -; GENERIC-LABEL: test_sub_16: +define void @test_test_16(i16 %a0, i16* %a1) optsize { +; GENERIC-LABEL: test_test_16: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: subw $511, %ax # imm = 0x1FF +; GENERIC-NEXT: testw $511, %ax # imm = 0x1FF ; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: subw $511, %di # imm = 0x1FF +; GENERIC-NEXT: testw $511, %di # imm = 0x1FF ; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: subw $511, (%rsi) # imm = 0x1FF -; GENERIC-NEXT: # sched: [7:1.00] -; GENERIC-NEXT: subw $7, %di # sched: [1:0.33] -; GENERIC-NEXT: subw $7, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: subw %di, %di # sched: [1:0.33] -; GENERIC-NEXT: subw %di, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: subw (%rsi), %di # sched: [6:0.50] +; GENERIC-NEXT: testw $511, (%rsi) # imm = 0x1FF +; GENERIC-NEXT: # sched: [5:1.00] +; GENERIC-NEXT: testw %di, %di # sched: [1:0.33] +; GENERIC-NEXT: testw %di, (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sub_16: +; ATOM-LABEL: test_test_16: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: subw $511, %ax # imm = 0x1FF +; ATOM-NEXT: testw $511, %ax # imm = 0x1FF ; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: subw $511, %di # imm = 0x1FF +; ATOM-NEXT: testw $511, %di # imm = 0x1FF ; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: subw $511, (%rsi) # imm = 0x1FF +; ATOM-NEXT: testw $511, (%rsi) # imm = 0x1FF ; ATOM-NEXT: # sched: [1:1.00] -; ATOM-NEXT: subw $7, %di # sched: [1:0.50] -; ATOM-NEXT: subw $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: subw %di, %di # sched: [1:0.50] -; ATOM-NEXT: subw %di, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: subw (%rsi), %di # sched: [1:1.00] +; ATOM-NEXT: testw %di, %di # sched: [1:0.50] +; ATOM-NEXT: testw %di, (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sub_16: +; SLM-LABEL: test_test_16: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: subw $511, %ax # imm = 0x1FF +; SLM-NEXT: testw $511, %ax # imm = 0x1FF ; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: subw $511, %di # imm = 0x1FF +; SLM-NEXT: testw $511, %di # imm = 0x1FF ; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: subw $511, (%rsi) # imm = 0x1FF +; SLM-NEXT: testw $511, (%rsi) # imm = 0x1FF ; SLM-NEXT: # sched: [4:2.00] -; SLM-NEXT: subw $7, %di # sched: [1:0.50] -; SLM-NEXT: subw $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: subw %di, %di # sched: [1:0.50] -; SLM-NEXT: subw %di, (%rsi) # sched: [4:2.00] -; SLM-NEXT: subw (%rsi), %di # sched: [4:1.00] +; SLM-NEXT: testw %di, %di # sched: [1:0.50] +; SLM-NEXT: testw %di, (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP -; SLM-NEXT: retq # sched: [4:1.00] -; -; SANDY-LABEL: test_sub_16: -; SANDY: # %bb.0: -; SANDY-NEXT: #APP -; SANDY-NEXT: subw $511, %ax # imm = 0x1FF -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: subw $511, %di # imm = 0x1FF -; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: subw $511, (%rsi) # imm = 0x1FF -; SANDY-NEXT: # sched: [7:1.00] -; SANDY-NEXT: subw $7, %di # sched: [1:0.33] -; SANDY-NEXT: subw $7, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: subw %di, %di # sched: [1:0.33] -; SANDY-NEXT: subw %di, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: subw (%rsi), %di # sched: [6:0.50] +; SLM-NEXT: retq # sched: [4:1.00] +; +; SANDY-LABEL: test_test_16: +; SANDY: # %bb.0: +; SANDY-NEXT: #APP +; SANDY-NEXT: testw $511, %ax # imm = 0x1FF +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: testw $511, %di # imm = 0x1FF +; SANDY-NEXT: # sched: [1:0.33] +; SANDY-NEXT: testw $511, (%rsi) # imm = 0x1FF +; SANDY-NEXT: # sched: [5:1.00] +; SANDY-NEXT: testw %di, %di # sched: [1:0.33] +; SANDY-NEXT: testw %di, (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sub_16: +; HASWELL-LABEL: test_test_16: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: subw $511, %ax # imm = 0x1FF +; HASWELL-NEXT: testw $511, %ax # imm = 0x1FF ; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: subw $511, %di # imm = 0x1FF +; HASWELL-NEXT: testw $511, %di # imm = 0x1FF ; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: subw $511, (%rsi) # imm = 0x1FF -; HASWELL-NEXT: # sched: [7:1.00] -; HASWELL-NEXT: subw $7, %di # sched: [1:0.25] -; HASWELL-NEXT: subw $7, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: subw %di, %di # sched: [1:0.25] -; HASWELL-NEXT: subw %di, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: subw (%rsi), %di # sched: [6:0.50] +; HASWELL-NEXT: testw $511, (%rsi) # imm = 0x1FF +; HASWELL-NEXT: # sched: [6:1.00] +; HASWELL-NEXT: testw %di, %di # sched: [1:0.25] +; HASWELL-NEXT: testw %di, (%rsi) # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sub_16: +; BROADWELL-LABEL: test_test_16: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: subw $511, %ax # imm = 0x1FF +; BROADWELL-NEXT: testw $511, %ax # imm = 0x1FF ; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: subw $511, %di # imm = 0x1FF +; BROADWELL-NEXT: testw $511, %di # imm = 0x1FF ; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: subw $511, (%rsi) # imm = 0x1FF +; BROADWELL-NEXT: testw $511, (%rsi) # imm = 0x1FF ; BROADWELL-NEXT: # sched: [6:1.00] -; BROADWELL-NEXT: subw $7, %di # sched: [1:0.25] -; BROADWELL-NEXT: subw $7, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: subw %di, %di # sched: [1:0.25] -; BROADWELL-NEXT: subw %di, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: subw (%rsi), %di # sched: [6:0.50] +; BROADWELL-NEXT: testw %di, %di # sched: [1:0.25] +; BROADWELL-NEXT: testw %di, (%rsi) # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sub_16: +; SKYLAKE-LABEL: test_test_16: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: subw $511, %ax # imm = 0x1FF +; SKYLAKE-NEXT: testw $511, %ax # imm = 0x1FF ; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: subw $511, %di # imm = 0x1FF +; SKYLAKE-NEXT: testw $511, %di # imm = 0x1FF ; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: subw $511, (%rsi) # imm = 0x1FF +; SKYLAKE-NEXT: testw $511, (%rsi) # imm = 0x1FF ; SKYLAKE-NEXT: # sched: [6:1.00] -; SKYLAKE-NEXT: subw $7, %di # sched: [1:0.25] -; SKYLAKE-NEXT: subw $7, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: subw %di, %di # sched: [1:0.25] -; SKYLAKE-NEXT: subw %di, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: subw (%rsi), %di # sched: [6:0.50] +; SKYLAKE-NEXT: testw %di, %di # sched: [1:0.25] +; SKYLAKE-NEXT: testw %di, (%rsi) # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sub_16: +; SKX-LABEL: test_test_16: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: subw $511, %ax # imm = 0x1FF +; SKX-NEXT: testw $511, %ax # imm = 0x1FF ; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: subw $511, %di # imm = 0x1FF +; SKX-NEXT: testw $511, %di # imm = 0x1FF ; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: subw $511, (%rsi) # imm = 0x1FF +; SKX-NEXT: testw $511, (%rsi) # imm = 0x1FF ; SKX-NEXT: # sched: [6:1.00] -; SKX-NEXT: subw $7, %di # sched: [1:0.25] -; SKX-NEXT: subw $7, (%rsi) # sched: [6:1.00] -; SKX-NEXT: subw %di, %di # sched: [1:0.25] -; SKX-NEXT: subw %di, (%rsi) # sched: [6:1.00] -; SKX-NEXT: subw (%rsi), %di # sched: [6:0.50] +; SKX-NEXT: testw %di, %di # sched: [1:0.25] +; SKX-NEXT: testw %di, (%rsi) # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sub_16: +; BTVER2-LABEL: test_test_16: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: subw $511, %ax # imm = 0x1FF +; BTVER2-NEXT: testw $511, %ax # imm = 0x1FF ; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: subw $511, %di # imm = 0x1FF +; BTVER2-NEXT: testw $511, %di # imm = 0x1FF ; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: subw $511, (%rsi) # imm = 0x1FF +; BTVER2-NEXT: testw $511, (%rsi) # imm = 0x1FF ; BTVER2-NEXT: # sched: [4:1.00] -; BTVER2-NEXT: subw $7, %di # sched: [1:0.50] -; BTVER2-NEXT: subw $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: subw %di, %di # sched: [1:0.50] -; BTVER2-NEXT: subw %di, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: subw (%rsi), %di # sched: [4:1.00] +; BTVER2-NEXT: testw %di, %di # sched: [1:0.50] +; BTVER2-NEXT: testw %di, (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sub_16: +; ZNVER1-LABEL: test_test_16: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: subw $511, %ax # imm = 0x1FF +; ZNVER1-NEXT: testw $511, %ax # imm = 0x1FF ; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: subw $511, %di # imm = 0x1FF +; ZNVER1-NEXT: testw $511, %di # imm = 0x1FF ; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: subw $511, (%rsi) # imm = 0x1FF -; ZNVER1-NEXT: # sched: [5:0.50] -; ZNVER1-NEXT: subw $7, %di # sched: [1:0.25] -; ZNVER1-NEXT: subw $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: subw %di, %di # sched: [1:0.25] -; ZNVER1-NEXT: subw %di, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: subw (%rsi), %di # sched: [5:0.50] +; ZNVER1-NEXT: testw $511, (%rsi) # imm = 0x1FF +; ZNVER1-NEXT: # sched: [5:1.00] +; ZNVER1-NEXT: testw %di, %di # sched: [1:0.25] +; ZNVER1-NEXT: testw %di, (%rsi) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "subw $2, %AX \0A\09 subw $2, $0 \0A\09 subw $2, $1 \0A\09 subw $3, $0 \0A\09 subw $3, $1 \0A\09 subw $0, $0 \0A\09 subw $0, $1 \0A\09 subw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind + tail call void asm "testw $2, %AX \0A\09 testw $2, $0 \0A\09 testw $2, $1 \0A\09 testw $0, $0 \0A\09 testw $0, $1", "r,*m,i"(i16 %a0, i16* %a1, i16 511) nounwind ret void } -define void @test_sub_32(i32 %a0, i32* %a1) optsize { -; GENERIC-LABEL: test_sub_32: +define void @test_test_32(i32 %a0, i32* %a1) optsize { +; GENERIC-LABEL: test_test_32: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: subl $665536, %eax # imm = 0xA27C0 +; GENERIC-NEXT: testl $665536, %eax # imm = 0xA27C0 ; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: subl $665536, %edi # imm = 0xA27C0 +; GENERIC-NEXT: testl $665536, %edi # imm = 0xA27C0 ; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [7:1.00] -; GENERIC-NEXT: subl $7, %edi # sched: [1:0.33] -; GENERIC-NEXT: subl $7, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: subl %edi, %edi # sched: [1:0.33] -; GENERIC-NEXT: subl %edi, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: subl (%rsi), %edi # sched: [6:0.50] +; GENERIC-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [5:1.00] +; GENERIC-NEXT: testl %edi, %edi # sched: [1:0.33] +; GENERIC-NEXT: testl %edi, (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sub_32: +; ATOM-LABEL: test_test_32: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: subl $665536, %eax # imm = 0xA27C0 +; ATOM-NEXT: testl $665536, %eax # imm = 0xA27C0 ; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: subl $665536, %edi # imm = 0xA27C0 +; ATOM-NEXT: testl $665536, %edi # imm = 0xA27C0 ; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 ; ATOM-NEXT: # sched: [1:1.00] -; ATOM-NEXT: subl $7, %edi # sched: [1:0.50] -; ATOM-NEXT: subl $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: subl %edi, %edi # sched: [1:0.50] -; ATOM-NEXT: subl %edi, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: subl (%rsi), %edi # sched: [1:1.00] +; ATOM-NEXT: testl %edi, %edi # sched: [1:0.50] +; ATOM-NEXT: testl %edi, (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sub_32: +; SLM-LABEL: test_test_32: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: subl $665536, %eax # imm = 0xA27C0 +; SLM-NEXT: testl $665536, %eax # imm = 0xA27C0 ; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: subl $665536, %edi # imm = 0xA27C0 +; SLM-NEXT: testl $665536, %edi # imm = 0xA27C0 ; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 ; SLM-NEXT: # sched: [4:2.00] -; SLM-NEXT: subl $7, %edi # sched: [1:0.50] -; SLM-NEXT: subl $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: subl %edi, %edi # sched: [1:0.50] -; SLM-NEXT: subl %edi, (%rsi) # sched: [4:2.00] -; SLM-NEXT: subl (%rsi), %edi # sched: [4:1.00] +; SLM-NEXT: testl %edi, %edi # sched: [1:0.50] +; SLM-NEXT: testl %edi, (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sub_32: +; SANDY-LABEL: test_test_32: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: subl $665536, %eax # imm = 0xA27C0 +; SANDY-NEXT: testl $665536, %eax # imm = 0xA27C0 ; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: subl $665536, %edi # imm = 0xA27C0 +; SANDY-NEXT: testl $665536, %edi # imm = 0xA27C0 ; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 -; SANDY-NEXT: # sched: [7:1.00] -; SANDY-NEXT: subl $7, %edi # sched: [1:0.33] -; SANDY-NEXT: subl $7, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: subl %edi, %edi # sched: [1:0.33] -; SANDY-NEXT: subl %edi, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: subl (%rsi), %edi # sched: [6:0.50] +; SANDY-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [5:1.00] +; SANDY-NEXT: testl %edi, %edi # sched: [1:0.33] +; SANDY-NEXT: testl %edi, (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sub_32: +; HASWELL-LABEL: test_test_32: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: subl $665536, %eax # imm = 0xA27C0 +; HASWELL-NEXT: testl $665536, %eax # imm = 0xA27C0 ; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: subl $665536, %edi # imm = 0xA27C0 +; HASWELL-NEXT: testl $665536, %edi # imm = 0xA27C0 ; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [7:1.00] -; HASWELL-NEXT: subl $7, %edi # sched: [1:0.25] -; HASWELL-NEXT: subl $7, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: subl %edi, %edi # sched: [1:0.25] -; HASWELL-NEXT: subl %edi, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: subl (%rsi), %edi # sched: [6:0.50] +; HASWELL-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [6:1.00] +; HASWELL-NEXT: testl %edi, %edi # sched: [1:0.25] +; HASWELL-NEXT: testl %edi, (%rsi) # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sub_32: +; BROADWELL-LABEL: test_test_32: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: subl $665536, %eax # imm = 0xA27C0 +; BROADWELL-NEXT: testl $665536, %eax # imm = 0xA27C0 ; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: subl $665536, %edi # imm = 0xA27C0 +; BROADWELL-NEXT: testl $665536, %edi # imm = 0xA27C0 ; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 ; BROADWELL-NEXT: # sched: [6:1.00] -; BROADWELL-NEXT: subl $7, %edi # sched: [1:0.25] -; BROADWELL-NEXT: subl $7, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: subl %edi, %edi # sched: [1:0.25] -; BROADWELL-NEXT: subl %edi, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: subl (%rsi), %edi # sched: [6:0.50] +; BROADWELL-NEXT: testl %edi, %edi # sched: [1:0.25] +; BROADWELL-NEXT: testl %edi, (%rsi) # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sub_32: +; SKYLAKE-LABEL: test_test_32: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: subl $665536, %eax # imm = 0xA27C0 +; SKYLAKE-NEXT: testl $665536, %eax # imm = 0xA27C0 ; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: subl $665536, %edi # imm = 0xA27C0 +; SKYLAKE-NEXT: testl $665536, %edi # imm = 0xA27C0 ; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 ; SKYLAKE-NEXT: # sched: [6:1.00] -; SKYLAKE-NEXT: subl $7, %edi # sched: [1:0.25] -; SKYLAKE-NEXT: subl $7, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: subl %edi, %edi # sched: [1:0.25] -; SKYLAKE-NEXT: subl %edi, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: subl (%rsi), %edi # sched: [6:0.50] +; SKYLAKE-NEXT: testl %edi, %edi # sched: [1:0.25] +; SKYLAKE-NEXT: testl %edi, (%rsi) # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sub_32: +; SKX-LABEL: test_test_32: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: subl $665536, %eax # imm = 0xA27C0 +; SKX-NEXT: testl $665536, %eax # imm = 0xA27C0 ; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: subl $665536, %edi # imm = 0xA27C0 +; SKX-NEXT: testl $665536, %edi # imm = 0xA27C0 ; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 ; SKX-NEXT: # sched: [6:1.00] -; SKX-NEXT: subl $7, %edi # sched: [1:0.25] -; SKX-NEXT: subl $7, (%rsi) # sched: [6:1.00] -; SKX-NEXT: subl %edi, %edi # sched: [1:0.25] -; SKX-NEXT: subl %edi, (%rsi) # sched: [6:1.00] -; SKX-NEXT: subl (%rsi), %edi # sched: [6:0.50] +; SKX-NEXT: testl %edi, %edi # sched: [1:0.25] +; SKX-NEXT: testl %edi, (%rsi) # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sub_32: +; BTVER2-LABEL: test_test_32: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: subl $665536, %eax # imm = 0xA27C0 +; BTVER2-NEXT: testl $665536, %eax # imm = 0xA27C0 ; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: subl $665536, %edi # imm = 0xA27C0 +; BTVER2-NEXT: testl $665536, %edi # imm = 0xA27C0 ; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 ; BTVER2-NEXT: # sched: [4:1.00] -; BTVER2-NEXT: subl $7, %edi # sched: [1:0.50] -; BTVER2-NEXT: subl $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: subl %edi, %edi # sched: [1:0.50] -; BTVER2-NEXT: subl %edi, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: subl (%rsi), %edi # sched: [4:1.00] +; BTVER2-NEXT: testl %edi, %edi # sched: [1:0.50] +; BTVER2-NEXT: testl %edi, (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sub_32: +; ZNVER1-LABEL: test_test_32: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: subl $665536, %eax # imm = 0xA27C0 +; ZNVER1-NEXT: testl $665536, %eax # imm = 0xA27C0 ; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: subl $665536, %edi # imm = 0xA27C0 +; ZNVER1-NEXT: testl $665536, %edi # imm = 0xA27C0 ; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: subl $665536, (%rsi) # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [5:0.50] -; ZNVER1-NEXT: subl $7, %edi # sched: [1:0.25] -; ZNVER1-NEXT: subl $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: subl %edi, %edi # sched: [1:0.25] -; ZNVER1-NEXT: subl %edi, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: subl (%rsi), %edi # sched: [5:0.50] +; ZNVER1-NEXT: testl $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:1.00] +; ZNVER1-NEXT: testl %edi, %edi # sched: [1:0.25] +; ZNVER1-NEXT: testl %edi, (%rsi) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "subl $2, %EAX \0A\09 subl $2, $0 \0A\09 subl $2, $1 \0A\09 subl $3, $0 \0A\09 subl $3, $1 \0A\09 subl $0, $0 \0A\09 subl $0, $1 \0A\09 subl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind + tail call void asm "testl $2, %EAX \0A\09 testl $2, $0 \0A\09 testl $2, $1 \0A\09 testl $0, $0 \0A\09 testl $0, $1", "r,*m,i"(i32 %a0, i32* %a1, i32 665536) nounwind ret void } -define void @test_sub_64(i64 %a0, i64* %a1) optsize { -; GENERIC-LABEL: test_sub_64: +define void @test_test_64(i64 %a0, i64* %a1) optsize { +; GENERIC-LABEL: test_test_64: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: subq $665536, %rax # imm = 0xA27C0 +; GENERIC-NEXT: testq $665536, %rax # imm = 0xA27C0 ; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; GENERIC-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; GENERIC-NEXT: # sched: [1:0.33] -; GENERIC-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 -; GENERIC-NEXT: # sched: [7:1.00] -; GENERIC-NEXT: subq $7, %rdi # sched: [1:0.33] -; GENERIC-NEXT: subq $7, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: subq %rdi, %rdi # sched: [1:0.33] -; GENERIC-NEXT: subq %rdi, (%rsi) # sched: [7:1.00] -; GENERIC-NEXT: subq (%rsi), %rdi # sched: [6:0.50] +; GENERIC-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 +; GENERIC-NEXT: # sched: [5:1.00] +; GENERIC-NEXT: testq %rdi, %rdi # sched: [1:0.33] +; GENERIC-NEXT: testq %rdi, (%rsi) # sched: [7:1.00] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; -; ATOM-LABEL: test_sub_64: +; ATOM-LABEL: test_test_64: ; ATOM: # %bb.0: ; ATOM-NEXT: #APP -; ATOM-NEXT: subq $665536, %rax # imm = 0xA27C0 +; ATOM-NEXT: testq $665536, %rax # imm = 0xA27C0 ; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; ATOM-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; ATOM-NEXT: # sched: [1:0.50] -; ATOM-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; ATOM-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 ; ATOM-NEXT: # sched: [1:1.00] -; ATOM-NEXT: subq $7, %rdi # sched: [1:0.50] -; ATOM-NEXT: subq $7, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: subq %rdi, %rdi # sched: [1:0.50] -; ATOM-NEXT: subq %rdi, (%rsi) # sched: [1:1.00] -; ATOM-NEXT: subq (%rsi), %rdi # sched: [1:1.00] +; ATOM-NEXT: testq %rdi, %rdi # sched: [1:0.50] +; ATOM-NEXT: testq %rdi, (%rsi) # sched: [1:1.00] ; ATOM-NEXT: #NO_APP ; ATOM-NEXT: retq # sched: [79:39.50] ; -; SLM-LABEL: test_sub_64: +; SLM-LABEL: test_test_64: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: subq $665536, %rax # imm = 0xA27C0 +; SLM-NEXT: testq $665536, %rax # imm = 0xA27C0 ; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; SLM-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; SLM-NEXT: # sched: [1:0.50] -; SLM-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; SLM-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 ; SLM-NEXT: # sched: [4:2.00] -; SLM-NEXT: subq $7, %rdi # sched: [1:0.50] -; SLM-NEXT: subq $7, (%rsi) # sched: [4:2.00] -; SLM-NEXT: subq %rdi, %rdi # sched: [1:0.50] -; SLM-NEXT: subq %rdi, (%rsi) # sched: [4:2.00] -; SLM-NEXT: subq (%rsi), %rdi # sched: [4:1.00] +; SLM-NEXT: testq %rdi, %rdi # sched: [1:0.50] +; SLM-NEXT: testq %rdi, (%rsi) # sched: [4:2.00] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retq # sched: [4:1.00] ; -; SANDY-LABEL: test_sub_64: +; SANDY-LABEL: test_test_64: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: subq $665536, %rax # imm = 0xA27C0 +; SANDY-NEXT: testq $665536, %rax # imm = 0xA27C0 ; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; SANDY-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; SANDY-NEXT: # sched: [1:0.33] -; SANDY-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 -; SANDY-NEXT: # sched: [7:1.00] -; SANDY-NEXT: subq $7, %rdi # sched: [1:0.33] -; SANDY-NEXT: subq $7, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: subq %rdi, %rdi # sched: [1:0.33] -; SANDY-NEXT: subq %rdi, (%rsi) # sched: [7:1.00] -; SANDY-NEXT: subq (%rsi), %rdi # sched: [6:0.50] +; SANDY-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 +; SANDY-NEXT: # sched: [5:1.00] +; SANDY-NEXT: testq %rdi, %rdi # sched: [1:0.33] +; SANDY-NEXT: testq %rdi, (%rsi) # sched: [7:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retq # sched: [1:1.00] ; -; HASWELL-LABEL: test_sub_64: +; HASWELL-LABEL: test_test_64: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: subq $665536, %rax # imm = 0xA27C0 +; HASWELL-NEXT: testq $665536, %rax # imm = 0xA27C0 ; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; HASWELL-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; HASWELL-NEXT: # sched: [1:0.25] -; HASWELL-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 -; HASWELL-NEXT: # sched: [7:1.00] -; HASWELL-NEXT: subq $7, %rdi # sched: [1:0.25] -; HASWELL-NEXT: subq $7, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: subq %rdi, %rdi # sched: [1:0.25] -; HASWELL-NEXT: subq %rdi, (%rsi) # sched: [7:1.00] -; HASWELL-NEXT: subq (%rsi), %rdi # sched: [6:0.50] +; HASWELL-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 +; HASWELL-NEXT: # sched: [6:1.00] +; HASWELL-NEXT: testq %rdi, %rdi # sched: [1:0.25] +; HASWELL-NEXT: testq %rdi, (%rsi) # sched: [6:0.50] ; HASWELL-NEXT: #NO_APP ; HASWELL-NEXT: retq # sched: [7:1.00] ; -; BROADWELL-LABEL: test_sub_64: +; BROADWELL-LABEL: test_test_64: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: subq $665536, %rax # imm = 0xA27C0 +; BROADWELL-NEXT: testq $665536, %rax # imm = 0xA27C0 ; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; BROADWELL-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; BROADWELL-NEXT: # sched: [1:0.25] -; BROADWELL-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; BROADWELL-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 ; BROADWELL-NEXT: # sched: [6:1.00] -; BROADWELL-NEXT: subq $7, %rdi # sched: [1:0.25] -; BROADWELL-NEXT: subq $7, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: subq %rdi, %rdi # sched: [1:0.25] -; BROADWELL-NEXT: subq %rdi, (%rsi) # sched: [6:1.00] -; BROADWELL-NEXT: subq (%rsi), %rdi # sched: [6:0.50] +; BROADWELL-NEXT: testq %rdi, %rdi # sched: [1:0.25] +; BROADWELL-NEXT: testq %rdi, (%rsi) # sched: [6:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retq # sched: [7:1.00] ; -; SKYLAKE-LABEL: test_sub_64: +; SKYLAKE-LABEL: test_test_64: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: subq $665536, %rax # imm = 0xA27C0 +; SKYLAKE-NEXT: testq $665536, %rax # imm = 0xA27C0 ; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; SKYLAKE-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; SKYLAKE-NEXT: # sched: [1:0.25] -; SKYLAKE-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; SKYLAKE-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 ; SKYLAKE-NEXT: # sched: [6:1.00] -; SKYLAKE-NEXT: subq $7, %rdi # sched: [1:0.25] -; SKYLAKE-NEXT: subq $7, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: subq %rdi, %rdi # sched: [1:0.25] -; SKYLAKE-NEXT: subq %rdi, (%rsi) # sched: [6:1.00] -; SKYLAKE-NEXT: subq (%rsi), %rdi # sched: [6:0.50] +; SKYLAKE-NEXT: testq %rdi, %rdi # sched: [1:0.25] +; SKYLAKE-NEXT: testq %rdi, (%rsi) # sched: [6:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; -; SKX-LABEL: test_sub_64: +; SKX-LABEL: test_test_64: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: subq $665536, %rax # imm = 0xA27C0 +; SKX-NEXT: testq $665536, %rax # imm = 0xA27C0 ; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; SKX-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; SKX-NEXT: # sched: [1:0.25] -; SKX-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; SKX-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 ; SKX-NEXT: # sched: [6:1.00] -; SKX-NEXT: subq $7, %rdi # sched: [1:0.25] -; SKX-NEXT: subq $7, (%rsi) # sched: [6:1.00] -; SKX-NEXT: subq %rdi, %rdi # sched: [1:0.25] -; SKX-NEXT: subq %rdi, (%rsi) # sched: [6:1.00] -; SKX-NEXT: subq (%rsi), %rdi # sched: [6:0.50] +; SKX-NEXT: testq %rdi, %rdi # sched: [1:0.25] +; SKX-NEXT: testq %rdi, (%rsi) # sched: [6:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retq # sched: [7:1.00] ; -; BTVER2-LABEL: test_sub_64: +; BTVER2-LABEL: test_test_64: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: subq $665536, %rax # imm = 0xA27C0 +; BTVER2-NEXT: testq $665536, %rax # imm = 0xA27C0 ; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; BTVER2-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; BTVER2-NEXT: # sched: [1:0.50] -; BTVER2-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 +; BTVER2-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 ; BTVER2-NEXT: # sched: [4:1.00] -; BTVER2-NEXT: subq $7, %rdi # sched: [1:0.50] -; BTVER2-NEXT: subq $7, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: subq %rdi, %rdi # sched: [1:0.50] -; BTVER2-NEXT: subq %rdi, (%rsi) # sched: [4:1.00] -; BTVER2-NEXT: subq (%rsi), %rdi # sched: [4:1.00] +; BTVER2-NEXT: testq %rdi, %rdi # sched: [1:0.50] +; BTVER2-NEXT: testq %rdi, (%rsi) # sched: [4:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; -; ZNVER1-LABEL: test_sub_64: +; ZNVER1-LABEL: test_test_64: ; ZNVER1: # %bb.0: ; ZNVER1-NEXT: #APP -; ZNVER1-NEXT: subq $665536, %rax # imm = 0xA27C0 +; ZNVER1-NEXT: testq $665536, %rax # imm = 0xA27C0 ; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: subq $665536, %rdi # imm = 0xA27C0 +; ZNVER1-NEXT: testq $665536, %rdi # imm = 0xA27C0 ; ZNVER1-NEXT: # sched: [1:0.25] -; ZNVER1-NEXT: subq $665536, (%rsi) # imm = 0xA27C0 -; ZNVER1-NEXT: # sched: [5:0.50] -; ZNVER1-NEXT: subq $7, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: subq $7, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: subq %rdi, %rdi # sched: [1:0.25] -; ZNVER1-NEXT: subq %rdi, (%rsi) # sched: [5:0.50] -; ZNVER1-NEXT: subq (%rsi), %rdi # sched: [5:0.50] +; ZNVER1-NEXT: testq $665536, (%rsi) # imm = 0xA27C0 +; ZNVER1-NEXT: # sched: [5:1.00] +; ZNVER1-NEXT: testq %rdi, %rdi # sched: [1:0.25] +; ZNVER1-NEXT: testq %rdi, (%rsi) # sched: [5:1.00] ; ZNVER1-NEXT: #NO_APP ; ZNVER1-NEXT: retq # sched: [1:0.50] - tail call void asm "subq $2, %RAX \0A\09 subq $2, $0 \0A\09 subq $2, $1 \0A\09 subq $3, $0 \0A\09 subq $3, $1 \0A\09 subq $0, $0 \0A\09 subq $0, $1 \0A\09 subq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind + tail call void asm "testq $2, %RAX \0A\09 testq $2, $0 \0A\09 testq $2, $1 \0A\09 testq $0, $0 \0A\09 testq $0, $1", "r,*m,i"(i64 %a0, i64* %a1, i32 665536) nounwind ret void } -; TODO - test_test - ; TODO: ud0, ud1 define void @test_ud2() optsize { ; GENERIC-LABEL: test_ud2: