[llvm-commits] CVS: llvm/lib/Target/Alpha/README.txt
Changes in directory llvm/lib/Target/Alpha: README.txt updated: 1.8 -> 1.9 --- Log message: Readme --- Diffs of the changes: (+42 -1) README.txt | 43 ++- 1 files changed, 42 insertions(+), 1 deletion(-) Index: llvm/lib/Target/Alpha/README.txt diff -u llvm/lib/Target/Alpha/README.txt:1.8 llvm/lib/Target/Alpha/README.txt:1.9 --- llvm/lib/Target/Alpha/README.txt:1.8Thu Feb 15 20:11:59 2007 +++ llvm/lib/Target/Alpha/README.txtSat Mar 31 10:05:44 2007 @@ -1 +1,42 @@ -* EMPTY * +*** + +add gcc builtins for alpha instructions + + +*** + +custom expand byteswap into nifty +extract/insert/mask byte/word/longword/quadword low/high +sequences + +*** + +see if any of the extract/insert/mask operations can be added + +*** + +match more interesting things for cmovlbc cmovlbs (move if low bit clear/set) + +*** + +lower srem and urem + +remq(i,j): i - (j * divq(i,j)) if j != 0 +remqu(i,j): i - (j * divqu(i,j)) if j != 0 +reml(i,j): i - (j * divl(i,j)) if j != 0 +remlu(i,j): i - (j * divlu(i,j)) if j != 0 + +*** + +add crazy vector instructions (MVI): + +(MIN|MAX)(U|S)(B8|W4) min and max, signed and unsigned, byte and word +PKWB, UNPKBW pack/unpack word to byte +PKLB UNPKBL pack/unpack long to byte +PERR pixel error (sum accross bytes of bytewise abs(i8v8 a - i8v8 b)) + +cmpbytes bytewise cmpeq of i8v8 a and i8v8 b (not part of MVI extentions) + +this has some good examples for other operations that can be synthesised well +from these rather meager vector ops (such as saturating add). +http://www.alphalinux.org/docs/MVI-full.html ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/Alpha/README.txt
Changes in directory llvm/lib/Target/Alpha: README.txt updated: 1.7 -> 1.8 --- Log message: This was done recently --- Diffs of the changes: (+1 -3) README.txt |4 +--- 1 files changed, 1 insertion(+), 3 deletions(-) Index: llvm/lib/Target/Alpha/README.txt diff -u llvm/lib/Target/Alpha/README.txt:1.7 llvm/lib/Target/Alpha/README.txt:1.8 --- llvm/lib/Target/Alpha/README.txt:1.7Tue Oct 10 20:48:03 2006 +++ llvm/lib/Target/Alpha/README.txtThu Feb 15 20:11:59 2007 @@ -1,3 +1 @@ -%% -Fix Ordered/Unordered FP stuff - +* EMPTY * ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/Alpha/README.txt
Changes in directory llvm/lib/Target/Alpha: README.txt updated: 1.6 -> 1.7 --- Log message: This entry is done. switched to the gcc way of doing things. --- Diffs of the changes: (+0 -150) README.txt | 150 - 1 files changed, 150 deletions(-) Index: llvm/lib/Target/Alpha/README.txt diff -u llvm/lib/Target/Alpha/README.txt:1.6 llvm/lib/Target/Alpha/README.txt:1.7 --- llvm/lib/Target/Alpha/README.txt:1.6Tue Oct 10 20:44:46 2006 +++ llvm/lib/Target/Alpha/README.txtTue Oct 10 20:48:03 2006 @@ -1,153 +1,3 @@ -Fix jump table support. currently it uses 64bit absolute address. -gcc uses gprel32. This way I won't keep fighting Evan as he keeps -breaking 64bit entries in jump tables... - -#include -#include - -int main(int x, char** y) -{ -char* foo; -switch(x) { -case 1: -foo = "1"; -break; -case 2: -foo = "2"; -break; -case 3: -foo = "3"; -break; -case 4: -foo = "4"; -break; -case 5: -foo = "5"; -break; -case 6: -foo = "6"; -break; -case 7: -foo = "7"; -break; -case 8: -foo = "8"; -break; -}; -print(foo); -return 0; - -} - - -.set noreorder -.set volatile -.set noat -.set nomacro -.section.rodata.str1.1,"aMS",@progbits,1 -$LC6: -.ascii "7\0" -$LC7: -.ascii "8\0" -$LC0: -.ascii "1\0" -$LC1: -.ascii "2\0" -$LC2: -.ascii "3\0" -$LC3: -.ascii "4\0" -$LC4: -.ascii "5\0" -$LC5: -.ascii "6\0" -.text -.align 2 -.align 4 -.globl main -.ent main -main: -.frame $30,16,$26,0 -.mask 0x400,-16 -ldah $29,0($27) !gpdisp!1 -lda $29,0($29) !gpdisp!1 -$main..ng: -zapnot $16,15,$16 -lda $30,-16($30) -cmpule $16,8,$1 -stq $26,0($30) -.prologue 1 -beq $1,$L2 -ldah $6,$L11($29) !gprelhigh -lda $5,$L11($6) !gprellow -s4addq $16,$5,$0 -ldl $2,0($0) -addq $29,$2,$3 -jmp $31,($3),$L2 -.section.rodata -.align 2 -.align 2 -$L11: -.gprel32 $L2 -.gprel32 $L3 -.gprel32 $L4 -.gprel32 $L5 -.gprel32 $L6 -.gprel32 $L7 -.gprel32 $L8 -.gprel32 $L9 -.gprel32 $L10 -.text -$L9: -ldah $20,$LC6($29) !gprelhigh -lda $4,$LC6($20)!gprellow -.align 4 -$L2: -mov $4,$16 -ldq $27,print($29) !literal!2 -jsr $26,($27),print !lituse_jsr!2 -ldah $29,0($26) !gpdisp!3 -mov $31,$0 -bis $31,$31,$31 -lda $29,0($29) !gpdisp!3 -ldq $26,0($30) -lda $30,16($30) -ret $31,($26),1 -$L10: -ldah $21,$LC7($29) !gprelhigh -lda $4,$LC7($21)!gprellow -br $31,$L2 -$L3: -ldah $7,$LC0($29) !gprelhigh -lda $4,$LC0($7) !gprellow -br $31,$L2 -$L4: -ldah $8,$LC1($29) !gprelhigh -lda $4,$LC1($8) !gprellow -br $31,$L2 -$L5: -ldah $16,$LC2($29) !gprelhigh -lda $4,$LC2($16)!gprellow -br $31,$L2 -$L6: -ldah $17,$LC3($29) !gprelhigh -lda $4,$LC3($17)!gprellow -br $31,$L2 -$L7: -ldah $18,$LC4($29) !gprelhigh -lda $4,$LC4($18)!gprellow -br $31,$L2 -$L8: -ldah $19,$LC5($29) !gprelhigh -lda $4,$LC5($19)!gprellow -br $31,$L2 -.end main -.section.note.GNU-stack,"",@progbits -.ident "GCC: (GNU) 3.4.4 20050314 (prerelease) (Debian 3.4.3-13)" - - - - %% Fix Ordered/Unordered FP stuff ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/Alpha/README.txt
Changes in directory llvm/lib/Target/Alpha: README.txt updated: 1.5 -> 1.6 --- Log message: This has apparently been fixed --- Diffs of the changes: (+0 -30) README.txt | 30 -- 1 files changed, 30 deletions(-) Index: llvm/lib/Target/Alpha/README.txt diff -u llvm/lib/Target/Alpha/README.txt:1.5 llvm/lib/Target/Alpha/README.txt:1.6 --- llvm/lib/Target/Alpha/README.txt:1.5Sun Sep 24 08:13:10 2006 +++ llvm/lib/Target/Alpha/README.txtTue Oct 10 20:44:46 2006 @@ -151,33 +151,3 @@ %% Fix Ordered/Unordered FP stuff - -%% -improve bytezap opertunities -ulong %foo(ulong %y) { -entry: -%tmp = and ulong %y, 65535 -%tmp2 = shr ulong %tmp, ubyte 3 -ret ulong %tmp2 -} - - -compiles to a 3 instruction sequence without instcombine -zapnot $16,3,$0 -srl $0,3,$0 -ret $31,($26),1 - -After instcombine you get -ulong %foo(ulong %y) { -entry: -%tmp = shr ulong %y, ubyte 3; [#uses=1] -%tmp2 = and ulong %tmp, 8191; [#uses=1] -ret ulong %tmp2 -} - -which compiles to -lda $0,8191($31) -srl $16,3,$1 -and $1,$0,$0 -ret $31,($26),1 - ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/Alpha/Readme.txt
Changes in directory llvm/lib/Target/Alpha: Readme.txt updated: 1.4 -> 1.5 --- Log message: jump table note --- Diffs of the changes: (+150 -0) Readme.txt | 150 + 1 files changed, 150 insertions(+) Index: llvm/lib/Target/Alpha/Readme.txt diff -u llvm/lib/Target/Alpha/Readme.txt:1.4 llvm/lib/Target/Alpha/Readme.txt:1.5 --- llvm/lib/Target/Alpha/Readme.txt:1.4Wed Sep 20 10:05:49 2006 +++ llvm/lib/Target/Alpha/Readme.txtSun Sep 24 08:13:10 2006 @@ -1,3 +1,153 @@ +Fix jump table support. currently it uses 64bit absolute address. +gcc uses gprel32. This way I won't keep fighting Evan as he keeps +breaking 64bit entries in jump tables... + +#include +#include + +int main(int x, char** y) +{ +char* foo; +switch(x) { +case 1: +foo = "1"; +break; +case 2: +foo = "2"; +break; +case 3: +foo = "3"; +break; +case 4: +foo = "4"; +break; +case 5: +foo = "5"; +break; +case 6: +foo = "6"; +break; +case 7: +foo = "7"; +break; +case 8: +foo = "8"; +break; +}; +print(foo); +return 0; + +} + + +.set noreorder +.set volatile +.set noat +.set nomacro +.section.rodata.str1.1,"aMS",@progbits,1 +$LC6: +.ascii "7\0" +$LC7: +.ascii "8\0" +$LC0: +.ascii "1\0" +$LC1: +.ascii "2\0" +$LC2: +.ascii "3\0" +$LC3: +.ascii "4\0" +$LC4: +.ascii "5\0" +$LC5: +.ascii "6\0" +.text +.align 2 +.align 4 +.globl main +.ent main +main: +.frame $30,16,$26,0 +.mask 0x400,-16 +ldah $29,0($27) !gpdisp!1 +lda $29,0($29) !gpdisp!1 +$main..ng: +zapnot $16,15,$16 +lda $30,-16($30) +cmpule $16,8,$1 +stq $26,0($30) +.prologue 1 +beq $1,$L2 +ldah $6,$L11($29) !gprelhigh +lda $5,$L11($6) !gprellow +s4addq $16,$5,$0 +ldl $2,0($0) +addq $29,$2,$3 +jmp $31,($3),$L2 +.section.rodata +.align 2 +.align 2 +$L11: +.gprel32 $L2 +.gprel32 $L3 +.gprel32 $L4 +.gprel32 $L5 +.gprel32 $L6 +.gprel32 $L7 +.gprel32 $L8 +.gprel32 $L9 +.gprel32 $L10 +.text +$L9: +ldah $20,$LC6($29) !gprelhigh +lda $4,$LC6($20)!gprellow +.align 4 +$L2: +mov $4,$16 +ldq $27,print($29) !literal!2 +jsr $26,($27),print !lituse_jsr!2 +ldah $29,0($26) !gpdisp!3 +mov $31,$0 +bis $31,$31,$31 +lda $29,0($29) !gpdisp!3 +ldq $26,0($30) +lda $30,16($30) +ret $31,($26),1 +$L10: +ldah $21,$LC7($29) !gprelhigh +lda $4,$LC7($21)!gprellow +br $31,$L2 +$L3: +ldah $7,$LC0($29) !gprelhigh +lda $4,$LC0($7) !gprellow +br $31,$L2 +$L4: +ldah $8,$LC1($29) !gprelhigh +lda $4,$LC1($8) !gprellow +br $31,$L2 +$L5: +ldah $16,$LC2($29) !gprelhigh +lda $4,$LC2($16)!gprellow +br $31,$L2 +$L6: +ldah $17,$LC3($29) !gprelhigh +lda $4,$LC3($17)!gprellow +br $31,$L2 +$L7: +ldah $18,$LC4($29) !gprelhigh +lda $4,$LC4($18)!gprellow +br $31,$L2 +$L8: +ldah $19,$LC5($29) !gprelhigh +lda $4,$LC5($19)!gprellow +br $31,$L2 +.end main +.section.note.GNU-stack,"",@progbits +.ident "GCC: (GNU) 3.4.4 20050314 (prerelease) (Debian 3.4.3-13)" + + + + %% Fix Ordered/Unordered FP stuff ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/Alpha/Readme.txt
Changes in directory llvm/lib/Target/Alpha: Readme.txt updated: 1.2 -> 1.3 --- Log message: clarify with test case --- Diffs of the changes: (+13 -0) Readme.txt | 13 + 1 files changed, 13 insertions(+) Index: llvm/lib/Target/Alpha/Readme.txt diff -u llvm/lib/Target/Alpha/Readme.txt:1.2 llvm/lib/Target/Alpha/Readme.txt:1.3 --- llvm/lib/Target/Alpha/Readme.txt:1.2Wed Sep 20 09:40:01 2006 +++ llvm/lib/Target/Alpha/Readme.txtWed Sep 20 09:48:00 2006 @@ -1,6 +1,19 @@ %% Fix cmovs with a constant on the wrong side +aka: +lda $0,10($31) +cmovlt $17,$0,$16 + +is bad for: + +long %cmov_lt2(long %a, long %c) { +entry: + %tmp.1 = setlt long %c, 0 + %retval = select bool %tmp.1, long 10, long %a + ret long %retval +} + %% Fix Ordered/Unordered FP stuff ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/Alpha/Readme.txt
Changes in directory llvm/lib/Target/Alpha: Readme.txt updated: 1.1 -> 1.2 --- Log message: Add Note --- Diffs of the changes: (+3 -0) Readme.txt |3 +++ 1 files changed, 3 insertions(+) Index: llvm/lib/Target/Alpha/Readme.txt diff -u llvm/lib/Target/Alpha/Readme.txt:1.1 llvm/lib/Target/Alpha/Readme.txt:1.2 --- llvm/lib/Target/Alpha/Readme.txt:1.1Sat Jun 3 19:25:51 2006 +++ llvm/lib/Target/Alpha/Readme.txtWed Sep 20 09:40:01 2006 @@ -1,4 +1,7 @@ %% +Fix cmovs with a constant on the wrong side + +%% Fix Ordered/Unordered FP stuff ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/Alpha/Readme.txt AlphaInstrInfo.td
Changes in directory llvm/lib/Target/Alpha: Readme.txt added (r1.1) AlphaInstrInfo.td updated: 1.119 -> 1.120 --- Log message: ignore ordered/unordered for now --- Diffs of the changes: (+153 -0) AlphaInstrInfo.td | 120 ++ Readme.txt| 33 ++ 2 files changed, 153 insertions(+) Index: llvm/lib/Target/Alpha/Readme.txt diff -c /dev/null llvm/lib/Target/Alpha/Readme.txt:1.1 *** /dev/null Sat Jun 3 19:26:01 2006 --- llvm/lib/Target/Alpha/Readme.txtSat Jun 3 19:25:51 2006 *** *** 0 --- 1,33 + %% + Fix Ordered/Unordered FP stuff + + + %% + improve bytezap opertunities + ulong %foo(ulong %y) { + entry: + %tmp = and ulong %y, 65535 + %tmp2 = shr ulong %tmp, ubyte 3 + ret ulong %tmp2 + } + + + compiles to a 3 instruction sequence without instcombine + zapnot $16,3,$0 + srl $0,3,$0 + ret $31,($26),1 + + After instcombine you get + ulong %foo(ulong %y) { + entry: + %tmp = shr ulong %y, ubyte 3; [#uses=1] + %tmp2 = and ulong %tmp, 8191; [#uses=1] + ret ulong %tmp2 + } + + which compiles to + lda $0,8191($31) + srl $16,3,$1 + and $1,$0,$0 + ret $31,($26),1 + Index: llvm/lib/Target/Alpha/AlphaInstrInfo.td diff -u llvm/lib/Target/Alpha/AlphaInstrInfo.td:1.119 llvm/lib/Target/Alpha/AlphaInstrInfo.td:1.120 --- llvm/lib/Target/Alpha/AlphaInstrInfo.td:1.119 Sun Apr 2 23:19:17 2006 +++ llvm/lib/Target/Alpha/AlphaInstrInfo.td Sat Jun 3 19:25:51 2006 @@ -694,29 +694,88 @@ //Select double def : Pat<(select (seteq F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setoeq F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setueq F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; + def : Pat<(select (setne F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), (FCMOVEQT F8RC:$sf, F8RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setone F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVEQT F8RC:$sf, F8RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setune F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVEQT F8RC:$sf, F8RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; + def : Pat<(select (setgt F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLT F8RC:$RB, F8RC:$RA))>; +def : Pat<(select (setogt F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLT F8RC:$RB, F8RC:$RA))>; +def : Pat<(select (setugt F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLT F8RC:$RB, F8RC:$RA))>; + def : Pat<(select (setge F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLE F8RC:$RB, F8RC:$RA))>; +def : Pat<(select (setoge F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLE F8RC:$RB, F8RC:$RA))>; +def : Pat<(select (setuge F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLE F8RC:$RB, F8RC:$RA))>; + def : Pat<(select (setlt F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLT F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setolt F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLT F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setult F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLT F8RC:$RA, F8RC:$RB))>; + def : Pat<(select (setle F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLE F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setole F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLE F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setule F8RC:$RA, F8RC:$RB), F8RC:$st, F8RC:$sf), + (FCMOVNET F8RC:$sf, F8RC:$st, (CMPTLE F8RC:$RA, F8RC:$RB))>; + //Select single def : Pat<(select (seteq F8RC:$RA, F8RC:$RB), F4RC:$st, F4RC:$sf), (FCMOVNES F4RC:$sf, F4RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setoeq F8RC:$RA, F8RC:$RB), F4RC:$st, F4RC:$sf), + (FCMOVNES F4RC:$sf, F4RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setueq F8RC:$RA, F8RC:$RB), F4RC:$st, F4RC:$sf), + (FCMOVNES F4RC:$sf, F4RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; + def : Pat<(select (setne F8RC:$RA, F8RC:$RB), F4RC:$st, F4RC:$sf), (FCMOVEQS F4RC:$sf, F4RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setone F8RC:$RA, F8RC:$RB), F4RC:$st, F4RC:$sf), + (FCMOVEQS F4RC:$sf, F4RC:$st, (CMPTEQ F8RC:$RA, F8RC:$RB))>; +def : Pat<(select (setune F8RC:$RA, F8RC:$RB), F4RC:$st, F4RC:$sf), + (FCMOVEQS F4RC:$sf, F4RC:$st, (CMP