81 lines · c
1// RUN: %clang_cc1 -ffixed-point -triple x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,SIGNED2// 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,UNSIGNED3 4// RUN: %clang_cc1 -ffixed-point -triple x86_64-unknown-linux-gnu -emit-llvm %s -o - -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,SIGNED5// RUN: %clang_cc1 -ffixed-point -triple x86_64-unknown-linux-gnu -fpadding-on-unsigned-fixed-point -emit-llvm %s -o - -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,UNSIGNED6 7// Division between different fixed point types8short _Accum sa_const = 1.0hk / 2.0hk;9// CHECK-DAG: @sa_const = {{.*}}global i16 64, align 210_Accum a_const = 1.0hk / 2.0k;11// CHECK-DAG: @a_const = {{.*}}global i32 16384, align 412long _Accum la_const = 1.0hk / 2.0lk;13// CHECK-DAG: @la_const = {{.*}}global i64 1073741824, align 814short _Accum sa_const2 = 0.5hr / 2.0hk;15// CHECK-DAG: @sa_const2 = {{.*}}global i16 32, align 216short _Accum sa_const3 = 0.5r / 2.0hk;17// CHECK-DAG: @sa_const3 = {{.*}}global i16 32, align 218short _Accum sa_const4 = 0.5lr / 2.0hk;19// CHECK-DAG: @sa_const4 = {{.*}}global i16 32, align 220short _Accum sa_const5 = 2.0hk / 0.5lr;21// CHECK-DAG: @sa_const5 = {{.*}}global i16 512, align 222 23// Unsigned division24unsigned short _Accum usa_const = 3.0uhk / 2.0uhk;25// SIGNED-DAG: @usa_const = {{.*}}global i16 384, align 226// UNSIGNED-DAG: @usa_const = {{.*}}global i16 192, align 227 28// Unsigned / signed29short _Accum sa_const6 = 1.0uhk / 2.0hk;30// CHECK-DAG: @sa_const6 = {{.*}}global i16 64, align 231 32// Division with negative number33short _Accum sa_const7 = 0.5hr / (-2.0hk);34// CHECK-DAG: @sa_const7 = {{.*}}global i16 -32, align 235 36// Int division37unsigned short _Accum usa_const2 = 2 / 0.5uhk;38// SIGNED-DAG: @usa_const2 = {{.*}}global i16 1024, align 239// UNSIGNED-DAG: @usa_const2 = {{.*}}global i16 512, align 240short _Accum sa_const8 = 2 / (-0.5hk);41// CHECK-DAG: @sa_const8 = {{.*}}global i16 -512, align 242short _Accum sa_const9 = 256 / 2.0hk;43// CHECK-DAG: @sa_const9 = {{.*}}global i16 16384, align 244long _Fract lf_const = 0.5lr / -1;45// CHECK-DAG: @lf_const = {{.*}}global i32 -1073741824, align 446 47// Saturated division48_Sat short _Accum sat_sa_const = (_Sat short _Accum)128.0hk / (-0.25hk);49// CHECK-DAG: @sat_sa_const = {{.*}}global i16 -32768, align 250_Sat unsigned short _Accum sat_usa_const = (_Sat unsigned short _Accum)128.0uhk / (0.25uhk);51// SIGNED-DAG: @sat_usa_const = {{.*}}global i16 -1, align 252// UNSIGNED-DAG: @sat_usa_const = {{.*}}global i16 32767, align 253_Sat short _Accum sat_sa_const2 = (_Sat short _Accum)-128.0hk / (-0.0125hr);54// CHECK-DAG: @sat_sa_const2 = {{.*}}global i16 32767, align 255_Sat unsigned short _Accum sat_usa_const2 = (_Sat unsigned short _Accum)128.0uhk / (-128);56// CHECK-DAG: @sat_usa_const2 = {{.*}}global i16 0, align 257_Sat unsigned short _Accum sat_usa_const3 = (_Sat unsigned short _Accum)0.5uhk / -1;58// CHECK-DAG: @sat_usa_const3 = {{.*}}global i16 0, align 259_Sat short _Accum sat_sa_const3 = (_Sat short _Accum)-128.0hk / 128;60// CHECK-DAG: @sat_sa_const3 = {{.*}}global i16 -128, align 261_Sat short _Accum sat_sa_const4 = (_Sat short _Accum)-25.7hk / 0.1lk;62// CHECK-DAG: @sat_sa_const4 = {{.*}}global i16 -32768, align 263 64// Some more cases65short _Accum sa_const10 = 255.9921875hk / 255.9921875hk;66// CHECK-DAG: @sa_const10 = {{.*}}global i16 128, align 267short _Accum sat_sa_const5 = (_Sat short _Accum)(-255.0hk - 1.0hk) / 0.0078125hk;68// CHECK-DAG: @sat_sa_const5 = {{.*}}global i16 -32768, align 269_Sat short _Accum sat_sa_const6 = (_Sat short _Accum)(-255.0hk - 1.0hk) / -0.0078125hk;70// CHECK-DAG: @sat_sa_const6 = {{.*}}global i16 32767, align 271short _Accum sa_const12 = 255.9921875hk / -1.0hk;72// CHECK-DAG: @sa_const12 = {{.*}}global i16 -32767, align 273_Sat short _Accum sat_sa_const7 = (_Sat short _Accum)(-255.0hk - 1.0hk) / -1.0hk;74// CHECK-DAG: @sat_sa_const7 = {{.*}}global i16 32767, align 275short _Accum sa_const13 = 0.0234375hk / 2.0hk;76// CHECK-DAG: @sa_const13 = {{.*}}global i16 1, align 277short _Accum sa_const14 = -0.0234375hk / 2.0hk;78// CHECK-DAG: @sa_const14 = {{.*}}global i16 -2, align 279short _Accum sa_const15 = -0.0078125hk / 255.28125hk;80// CHECK-DAG: @sa_const15 = {{.*}}global i16 -1, align 281