summaryrefslogtreecommitdiffstats
path: root/libclc
Commit message (Collapse)AuthorAgeFilesLines
...
* Implement nextafter() builtinTom Stellard2013-10-1011-0/+95
| | | | | | | | | | | | | | There are two implementations of nextafter(): 1. Using clang's __builtin_nextafter. Clang replaces this builtin with a call to nextafter which is part of libm. Therefore, this implementation will only work for targets with an implementation of libm (e.g. most CPU targets). 2. The other implementation is written in OpenCL C. This function is known internally as __clc_nextafter and can be used by targets that don't have access to libm. llvm-svn: 192383
* Implement isnan() builtinTom Stellard2013-10-105-0/+46
| | | | llvm-svn: 192382
* Add missing as_{float,double} functionsTom Stellard2013-10-101-0/+15
| | | | llvm-svn: 192381
* Parenthesize arguments for mad_hiAaron Watry2013-09-091-1/+1
| | | | | | Thanks to Jordon Rose <jordan_rose@apple.com> for pointing this out. llvm-svn: 190310
* Implement mad_hi built-inAaron Watry2013-09-062-0/+2
| | | | | | | | | We already have a working mul_hi, and the spec gives us the implementation as: Returns mul_hi(a,b)+c. Signed-off-by: Aaron Watry <awatry@gmail.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 190211
* Add atomic_sub and atomic_dec builtin functionsAaron Watry2013-09-065-0/+19
| | | | | Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 190201
* Place pkg-config file in $prefix/share/pkgconfig.Tom Stellard2013-09-051-1/+1
| | | | | | | | | | libclc is ABI-agnostic, and $prefix/lib/pkgconfig causes issues on multilib setups. Using $prefix/share/pkgconfig allows us to reuse a single libclc build across all system ABIs. Patch by: Michał Górny llvm-svn: 190107
* Remove unneeded semi-colonsAaron Watry2013-09-051-6/+6
| | | | | Reviewed-By: Aaron Watry <awatry@gmail.com> llvm-svn: 190059
* Add atomic_inc and atomic_add builtinsAaron Watry2013-09-058-0/+51
| | | | | Reviewed-by: Aaron Watry <awatry@gmail.com> llvm-svn: 190058
* Add mul_hi implementation [v2]Aaron Watry2013-08-195-0/+114
| | | | | | | | | | | | | | | Everything except long/ulong is handled by just casting to the next larger type, doing the math and then shifting/casting the result. For 64-bit types, we break the high/low parts of each operand apart, and do a FOIL-based multiplication. v2: Discard the stack-overflow implementation due to copyright concerns. - The implementation is still FOIL-based, but discards the previous code. Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 188684
* Add rhadd builtinAaron Watry2013-08-156-0/+15
| | | | | | | | | | | | rhadd = (x+y+1)>>1 Implemented as: (x>>1) + (y>>1) + ((x&1)|(y&1)) This prevents us having to do assembly addition and overflow detection Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 188477
* Add hadd builtinAaron Watry2013-08-156-0/+15
| | | | | | | | | | (x + y) >> 1 gets changed to: (x>>1) + (y>>1) + (x&y&1) Saves us having to do any llvm assembly and overflow checking in the addition. Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 188476
* Add intN vloadN() implementations for address spaces 3 and 4Aaron Watry2013-08-121-0/+60
| | | | | | | | Not hooked up to R600 yet due to current lack of support, at least on EG. Signed-off-by: Aaron Watry <awatry@gmail.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 188181
* Enable assembly vload3 int/uint constant/global for R600Aaron Watry2013-08-121-16/+2
| | | | | | | | It's supported by the R600 LLVM back-end now, at least for evergreen. Signed-off-by: Aaron Watry <awatry@gmail.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 188180
* Add vload* for addrspace(2) and use as constant load for R600Aaron Watry2013-08-123-4/+42
| | | | | | Signed-off-by: Aaron Watry <awatry@gmail.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 188179
* Add some missing convert_* functionsTom Stellard2013-08-102-41/+39
| | | | llvm-svn: 188131
* Implement generic rint()Tom Stellard2013-08-102-0/+7
| | | | llvm-svn: 188130
* configure: Fix build when clang is installed to a non-standard prefixTom Stellard2013-08-101-2/+3
| | | | llvm-svn: 188129
* Add missing integer min/max definitionsAaron Watry2013-07-262-0/+18
| | | | | | | | Found in CL 1.1 spec section 6.11.3 Signed-off-by: Aaron Watry <awatry@gmail.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com> llvm-svn: 187200
* Added get_num_groupsAaron Watry2013-07-242-0/+19
| | | | | | | | | The get_num_groups function was missing for r600g. I did the same thing as the other workitem functions. Reviewed-by: Tom Stellard <thomas.stellard@amd.com> Reviewed-by: Aaron Watry <awatry@gmail.com> llvm-svn: 187059
* Implement generic upsample()Aaron Watry2013-07-194-0/+61
| | | | | | | | | | | | | | Reduces all vector upsamples down to its scalar components, so probably not the most efficient thing in the world, but it does what the spec says it needs to do. Another possible implementation would be to convert/cast everything as unsigned if necessary, upsample the input vectors, create the upsampled value, and then cast back to signed if required. Signed-off-by: Aaron Watry <awatry@gmail.com> Reviewed-by: Tom Stellard <thomas.stellard at amd.com> llvm-svn: 186691
* Fix build with LLVM 3.4Aaron Watry2013-07-181-0/+5
| | | | | | | | | F_Binary and friends were moved to include/Support/FileSystem.h v2: Maintain compatibility with LLVM 3.3 Signed-off-by: Aaron Watry <awatry@gmail.com> llvm-svn: 186610
* Fix and re-enable R600 vload/vstore assemblyAaron Watry2013-07-165-56/+233
| | | | | | | | | | | | | | | | | | | The assembly optimizations were making unsafe assumptions about which address spaces had which identifiers. Also, fix vload/vstore with 64-bit pointers. This was broken previously on Radeon SI. This version still only has assembly versions of int/uint 2/4/8/16 for global loads and stores on R600, but it does it in a way that would be very easily extended to private/local/constant and could also be handled easily on other architectures. v2: 1) Leave v[load|store]_impl.ll in generic/lib 2) Remove vload_if.ll and vstore_if.ll interfaces 3) Fix address+offset calculations 3) Remove offset from assembly arg list llvm-svn: 186416
* libclc: vload/vstore disable assembly and fix offset calculationAaron Watry2013-07-165-245/+20
| | | | | | | | | | | This commit gets us back to pure CLC and fixes offset calculations. The next commit will re-enable the assembly implementation for R600, fix bugs related to 64-bit address spaces, and also fix the incorrect assumption that address space identifiers are the same in all architectures. llvm-svn: 186415
* Add integer-gentype.inc: Missing file from r185839Tom Stellard2013-07-151-0/+39
| | | | llvm-svn: 186326
* Implement mad24() and mul24() builtinsTom Stellard2013-07-0810-0/+34
| | | | | Reviewed-by: Aaron Watry <awatry@gmail.com> llvm-svn: 185839
* Add __CLC_ prefix to all macro definitions in headersTom Stellard2013-07-0875-712/+712
| | | | | | | | | | | libclc was defining and undefing GENTYPE and several other macros with common names in its header files. This was preventing applications from defining macros with identical names as command line arguments to the compiler, because the definitions in the header files were masking the macros defined as compiler arguements. Reviewed-by: Aaron Watry <awatry@gmail.com> llvm-svn: 185838
* Implement barrier() builtinTom Stellard2013-07-083-0/+29
| | | | | | Reviewed and Tested-by: Aaron Watry <awatry@gmail.com> llvm-svn: 185837
* Add bitselect() builtinTom Stellard2013-07-082-0/+2
| | | | | Reviewed-By: Aaron Watry <awatry@gmail.com> llvm-svn: 185836
* libclc: Add assembly versions of vstore for global [u]int4/8/16Tom Stellard2013-06-264-6/+168
| | | | | | | | | | | | | The assembly should be generic, but at least currently R600 only supports 32-bit stores of [u]int1/4, and I believe that only global is well-supported. R600 lowers the 8/16 component stores to multiple 4-component stores. The unoptimized C versions of the other stuff is left in place. Patch by: Aaron Watry llvm-svn: 185009
* libclc: Add assembly versions of vload for global int4/8/16Tom Stellard2013-06-264-2/+162
| | | | | | | | | | | | | The assembly should be generic, but at least currently R600 only supports 32-bit loads of int1/4, and I believe that only global is well-supported. R600 lowers the 8/16 component vectors to multiple 4-bit loads. The unoptimized C versions of the other stuff is left in place. Patch by: Aaron Watry llvm-svn: 185008
* libclc: Initial vstore implementationTom Stellard2013-06-264-0/+94
| | | | | | | | | | Assumes that the target supports byte-addressable stores. Completely unoptimized. Patch by: Aaron Watry llvm-svn: 185007
* libclc: Initial vload implementationTom Stellard2013-06-264-0/+86
| | | | | | | | Should work for all targets and data types. Completely unoptimized. Patch by: Aaron Watry llvm-svn: 185006
* r600: Fix implementations of get_group_id.ll and get_local_size.llTom Stellard2013-06-262-12/+12
| | | | llvm-svn: 185005
* libclc: Implement clz() builtinTom Stellard2013-06-267-0/+158
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Squashed commit of the following: commit a0df0a0e86c55c1bdc0b9c0f5a739e5adef4b056 Author: Aaron Watry <awatry@gmail.com> Date: Mon Apr 15 18:42:04 2013 -0500 libclc: Rename clz.ll to clz_if.ll to ensure it gets built. configure.py treats files that have the same name with the .cl and .ll extensions as overriding eachother. E.g. If you have clz.cl and clz.ll both specified to be built in the same SOURCES file, only the first file listed will actually be built. Since the contents of clz.ll were an interface that is implemented in clz_impl.ll, rename clz.ll to clz_if.ll to make sure that the interface is built. commit 931b62bed05c58f737de625bd415af09571a6a5a Author: Aaron Watry <awatry@gmail.com> Date: Sat Apr 13 12:32:54 2013 -0500 libclc: llvm assembly implementation of clz Untested... currently crashes in the same manner as add_sat. commit 6ef0b7b0b6d2e5584086b4b9a9243743b2e0538f Author: Aaron Watry <awatry@gmail.com> Date: Sat Mar 23 12:35:27 2013 -0500 libclc: Add stub clz builtin For scalar int/uint, attempt to use the clz llvm builtin.. for all others return 0 until an actual implementation is finished. Patch by: Aaron Watry llvm-svn: 185004
* libclc: Add clamp(vec, scalar, scalar) and max(vec, scalar)Tom Stellard2013-06-264-0/+20
| | | | | | | | | | | For any GENTYPE that isn't scalar, we need to implement a mixed vector/scalar version of clamp/max. This depends on the min() patches I sent to the list a few minutes ago. Patch by: Aaron Watry llvm-svn: 185003
* libclc: Implement the min(vec, scalar) version of the min builtin.Tom Stellard2013-06-264-0/+41
| | | | | | | | | | Checks if the current GENTYPE is scalar, and if not, then defines a separate implementation of the function which casts the second arg to vector before proceeding. Patch by: Aaron Watry llvm-svn: 185002
* libclc: implement initial version of min()Tom Stellard2013-06-266-0/+22
| | | | | | | | This doesn't handle the integer cases for min(vector, scalar). Patch by: Aaron Watry llvm-svn: 185001
* libclc: Rename [add|sub]_sat.ll to [add|sub]_sat_if.llTom Stellard2013-06-264-2/+4
| | | | | | | | | | | | | | | | | configure.py allows overloading *.cl with *.ll, but will only ever build the first file listed in SOURCES of ${file}.cl and ${file}.ll add_sat, sub_sat, (and the soon to be submitted clz) all define interfaces in ${function_name}.ll which are implemented in ${function_name}_impl.ll. Renaming the interface files is enough to get them to build again, fixing CL usage of these functions. Tested on clover/r600g. Patch by: Aaron Watry llvm-svn: 185000
* Add a another TODO note.Tom Stellard2013-06-261-0/+3
| | | | | | Patch by: Aaron Watry llvm-svn: 184999
* Add a TODO note.Tom Stellard2013-06-261-0/+4
| | | | | | Patch by: Aaron Watry llvm-svn: 184998
* Simplify rotate implementation a bit..Tom Stellard2013-06-262-21/+37
| | | | | | | | Much more understandable/readable as a result, and probably more efficient. Patch by: Aaron Watry llvm-svn: 184997
* libclc: implement rotate builtinTom Stellard2013-06-267-0/+55
| | | | | | | | | | | | This implementation does a lot of bit shifting and masking. Suffice to say, this is somewhat suboptimal... but it does look to produce correct results (after the piglit tests were corrected for sign extension issues). Someone who knows LLVM better than I could re-write this more efficiently. Patch by: Aaron Watry llvm-svn: 184996
* libclc: Move max builtin to shared/Tom Stellard2013-06-2611-16/+10
| | | | | | | | Max(x,y) is available for all integer/floating types. Patch by: Aaron Watry llvm-svn: 184995
* libclc: Add clamp() builtin for integer/floating pointTom Stellard2013-06-266-0/+24
| | | | | | | | | Created under a new shared/ directory for functions which are available for both integer and floating point types. Patch by: Aaron Watry llvm-svn: 184994
* libclc: Fix abs_diff builtin integer functionTom Stellard2013-06-262-1/+2
| | | | | | Patch by: Aaron Watry llvm-svn: 184993
* libclc: Add max() builtin functionTom Stellard2013-06-2610-0/+28
| | | | | | | | Adds this function for both int and floating data types. Patch by: Aaron Watry llvm-svn: 184992
* configure: Enable building separate libraries for target variantsTom Stellard2013-06-261-44/+73
| | | | llvm-svn: 184991
* configure: fix out-of-source buildTom Stellard2013-06-261-2/+3
| | | | | | Patch by: Niels Ole Salscheider llvm-svn: 184990
* Fix build with LLVM 3.3Tom Stellard2013-06-261-4/+4
| | | | | | Patch by: Niels Ole Salscheider llvm-svn: 184989
OpenPOWER on IntegriCloud