Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0957ee7

Browse files
committed
C++: support clang's __builtin_convertvector
1 parent 7db2589 commit 0957ee7

5 files changed

Lines changed: 17 additions & 0 deletions

File tree

cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,13 @@ class BuiltInOperationBuiltInShuffleVector extends BuiltInOperation, @builtinshu
202202
override string toString() { result = "__builtin_shufflevector" }
203203
}
204204

205+
/**
206+
* A clang `__builtin_convertvector` expression.
207+
*/
208+
class BuiltInOperationBuiltInConvertVector extends BuiltInOperation, @builtinconvertvector {
209+
override string toString() { result = "__builtin_convertvector" }
210+
}
211+
205212
/**
206213
* A clang `__builtin_addressof` expression (can be used to implement C++'s std::addressof).
207214
*/

cpp/ql/src/semmlecode.cpp.dbscheme

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,6 +1431,7 @@ case @expr.kind of
14311431
| 321 = @builtinchooseexpr
14321432
| 322 = @builtinaddressof
14331433
| 323 = @vec_fill
1434+
| 324 = @builtinconvertvector
14341435
;
14351436

14361437
new_allocated_type(
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
| vector_types.cpp:31:13:31:49 | __builtin_shufflevector |
2+
| vector_types.cpp:58:10:58:52 | __builtin_convertvector |

cpp/ql/test/library-tests/vector_types/variables.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@
1717
| vector_types.cpp:47:23:47:25 | dst | dst | file://:0:0:0:0 | v16i * | 8 |
1818
| vector_types.cpp:47:34:47:36 | src | src | file://:0:0:0:0 | v16i * | 8 |
1919
| vector_types.cpp:47:43:47:43 | n | n | file://:0:0:0:0 | int | 4 |
20+
| vector_types.cpp:57:43:57:44 | vf | vf | vector_types.cpp:55:16:55:27 | vector4float | 16 |

cpp/ql/test/library-tests/vector_types/vector_types.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,10 @@ void shift_left(v16i *dst, v16i *src, int n) {
5050
// each element).
5151
*dst = *src << n;
5252
}
53+
54+
typedef double vector4double __attribute__((__vector_size__(32)));
55+
typedef float vector4float __attribute__((__vector_size__(16)));
56+
57+
vector4double convert_vector(vector4float vf) {
58+
return __builtin_convertvector(vf, vector4double);
59+
}

0 commit comments

Comments
 (0)