xref: /llvm-project/clang/test/Frontend/fixed_point_shift_const.c (revision c5de4dd1eab00df76c1a68c5f397304ceacb71f2)
1*c5de4dd1SFangrui Song // RUN: %clang_cc1 -ffixed-point -triple x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,SIGNED
2*c5de4dd1SFangrui Song // RUN: %clang_cc1 -ffixed-point -triple x86_64-unknown-linux-gnu -fpadding-on-unsigned-fixed-point -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,UNSIGNED
3577f8b15SBevin Hansson 
4577f8b15SBevin Hansson short _Accum sa_const1 = 1.0hk << 2;
5577f8b15SBevin Hansson // CHECK-DAG: @sa_const1 = {{.*}}global i16 512
6577f8b15SBevin Hansson short _Accum sa_const2 = 0.5hk << 2;
7577f8b15SBevin Hansson // CHECK-DAG: @sa_const2 = {{.*}}global i16 256
8577f8b15SBevin Hansson short _Accum sa_const3 = 10.0hk >> 3;
9577f8b15SBevin Hansson // CHECK-DAG: @sa_const3 = {{.*}}global i16 160
10577f8b15SBevin Hansson short _Accum sa_const4 = 0.0546875hk << 8;
11577f8b15SBevin Hansson // CHECK-DAG: @sa_const4 = {{.*}}global i16 1792
12577f8b15SBevin Hansson short _Accum sa_const5 = -1.0hk << 2;
13577f8b15SBevin Hansson // CHECK-DAG: @sa_const5 = {{.*}}global i16 -512
14577f8b15SBevin Hansson short _Accum sa_const6 = -255.0hk >> 8;
15577f8b15SBevin Hansson // CHECK-DAG: @sa_const6 = {{.*}}global i16 -128
16577f8b15SBevin Hansson 
17577f8b15SBevin Hansson _Fract f_const1 = -1.0r >> 5;
18577f8b15SBevin Hansson // CHECK-DAG: @f_const1 = {{.*}}global i16 -1024
19577f8b15SBevin Hansson _Fract f_const2 = 0.0052490234375r >> 3;
20577f8b15SBevin Hansson // CHECK-DAG: @f_const2 = {{.*}}global i16 21
21577f8b15SBevin Hansson _Fract f_const3 = -0.0001r << 5;
22577f8b15SBevin Hansson // CHECK-DAG: @f_const3 = {{.*}}global i16 -96
23577f8b15SBevin Hansson _Fract f_const4 = -0.75r >> 15;
24577f8b15SBevin Hansson // CHECK-DAG: @f_const4 = {{.*}}global i16 -1
25577f8b15SBevin Hansson _Fract f_const5 = 0.078216552734375r << 3;
26577f8b15SBevin Hansson // CHECK-DAG: @f_const5 = {{.*}}global i16 20504
27577f8b15SBevin Hansson 
28577f8b15SBevin Hansson unsigned _Fract uf_const1 = 0.375ur >> 13;
29577f8b15SBevin Hansson // SIGNED-DAG:   @uf_const1 = {{.*}}global i16 3
30577f8b15SBevin Hansson // UNSIGNED-DAG: @uf_const1 = {{.*}}global i16 1
31577f8b15SBevin Hansson unsigned _Fract uf_const2 = 0.0546875ur << 3;
32577f8b15SBevin Hansson // SIGNED-DAG:   @uf_const2 = {{.*}}global i16 28672
33577f8b15SBevin Hansson // UNSIGNED-DAG: @uf_const2 = {{.*}}global i16 14336
34577f8b15SBevin Hansson 
35577f8b15SBevin Hansson _Sat short _Accum ssa_const1 = (_Sat short _Accum)31.875hk << 4;
36577f8b15SBevin Hansson // CHECK-DAG: @ssa_const1 = {{.*}}global i16 32767
37577f8b15SBevin Hansson _Sat short _Accum ssa_const2 = (_Sat short _Accum) - 1.0hk << 8;
38577f8b15SBevin Hansson // CHECK-DAG: @ssa_const2 = {{.*}}global i16 -32768
39577f8b15SBevin Hansson _Sat short _Accum ssa_const3 = (_Sat short _Accum)128.0hk << 8;
40577f8b15SBevin Hansson // CHECK-DAG: @ssa_const3 = {{.*}}global i16 32767
41577f8b15SBevin Hansson _Sat short _Fract ssf_const1 = (_Sat short _Fract) - 0.5hr << 3;
42577f8b15SBevin Hansson // CHECK-DAG: @ssf_const1 = {{.*}}global i8 -128
43577f8b15SBevin Hansson 
44577f8b15SBevin Hansson _Sat unsigned _Fract suf_const1 = (_Sat unsigned _Fract)0.5r << 1;
45577f8b15SBevin Hansson // SIGNED-DAG:   @suf_const1 = {{.*}}global i16 -1
46577f8b15SBevin Hansson // UNSIGNED-DAG: @suf_const1 = {{.*}}global i16 32767
47577f8b15SBevin Hansson _Sat unsigned _Fract suf_const2 = (_Sat unsigned _Fract)0.25r << 1;
48577f8b15SBevin Hansson // SIGNED-DAG:   @suf_const2 = {{.*}}global i16 -32768
49577f8b15SBevin Hansson // UNSIGNED-DAG: @suf_const2 = {{.*}}global i16 16384
50577f8b15SBevin Hansson _Sat unsigned _Accum sua_const2 = (_Sat unsigned _Accum)128.0uk << 10;
51577f8b15SBevin Hansson // SIGNED-DAG:   @sua_const2 = {{.*}}global i32 -1
52577f8b15SBevin Hansson // UNSIGNED-DAG: @sua_const2 = {{.*}}global i32 2147483647
53