brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · ec104ed Raw
96 lines · plain
1// RUN: cir-opt %s -cir-to-llvm -o %t.cir2// RUN: FileCheck %s --input-file=%t.cir3 4!s16i = !cir.int<s, 16>5!s32i = !cir.int<s, 32>6!s64i = !cir.int<s, 64>7!s8i = !cir.int<s, 8>8!u32i = !cir.int<u, 32>9!u8i = !cir.int<u, 8>10!u64i = !cir.int<u, 64>11 12module {13  cir.func @cStyleCasts(%arg0: !u32i, %arg1: !s32i, %arg2: !cir.float, %arg3: !cir.double) -> !s32i {14  // CHECK: llvm.func @cStyleCasts15    %0 = cir.alloca !u32i, !cir.ptr<!u32i>, ["x1", init] {alignment = 4 : i64}16    %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["x2", init] {alignment = 4 : i64}17    %20 = cir.alloca !s16i, !cir.ptr<!s16i>, ["x4", init] {alignment = 2 : i64}18    %2 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}19    %3 = cir.alloca !s8i, !cir.ptr<!s8i>, ["a", init] {alignment = 1 : i64}20    %4 = cir.alloca !s16i, !cir.ptr<!s16i>, ["b", init] {alignment = 2 : i64}21    %5 = cir.alloca !s64i, !cir.ptr<!s64i>, ["c", init] {alignment = 8 : i64}22    %6 = cir.alloca !s64i, !cir.ptr<!s64i>, ["d", init] {alignment = 8 : i64}23    %8 = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["e", init] {alignment = 8 : i64}24    cir.store %arg0, %0 : !u32i, !cir.ptr<!u32i>25    cir.store %arg1, %1 : !s32i, !cir.ptr<!s32i>26 27    // Integer casts.28    %9 = cir.load %0 : !cir.ptr<!u32i>, !u32i29    %10 = cir.cast integral %9 : !u32i -> !s8i30    // CHECK: %{{[0-9]+}} = llvm.trunc %{{[0-9]+}} : i32 to i831    cir.store %10, %3 : !s8i, !cir.ptr<!s8i>32    %11 = cir.load %1 : !cir.ptr<!s32i>, !s32i33    %12 = cir.cast integral %11 : !s32i -> !s16i34    // CHECK: %{{[0-9]+}} = llvm.trunc %{{[0-9]+}} : i32 to i1635    cir.store %12, %4 : !s16i, !cir.ptr<!s16i>36    %13 = cir.load %0 : !cir.ptr<!u32i>, !u32i37    %14 = cir.cast integral %13 : !u32i -> !s64i38    // CHECK: %{{[0-9]+}} = llvm.zext %{{[0-9]+}} : i32 to i6439    cir.store %14, %5 : !s64i, !cir.ptr<!s64i>40    %15 = cir.load %1 : !cir.ptr<!s32i>, !s32i41    %16 = cir.cast integral %15 : !s32i -> !s64i42    // CHECK: %{{[0-9]+}} = llvm.sext %{{[0-9]+}} : i32 to i6443    %30 = cir.cast integral %arg1 : !s32i -> !u32i44    // Should not produce a cast.45    %32 = cir.cast integral %arg0 : !u32i -> !s32i46    // Should not produce a cast.47    %21 = cir.load %20 : !cir.ptr<!s16i>, !s16i48    %22 = cir.cast integral %21 : !s16i -> !u64i49    // CHECK: %[[TMP:[0-9]+]] = llvm.sext %{{[0-9]+}} : i16 to i6450    %33 = cir.cast int_to_bool %arg1 : !s32i -> !cir.bool51    // CHECK: %[[#ZERO:]] = llvm.mlir.constant(0 : i32) : i3252    // CHECK: %[[#CMP:]] = llvm.icmp "ne" %arg1, %[[#ZERO]] : i3253 54    // Pointer casts.55    cir.store %16, %6 : !s64i, !cir.ptr<!s64i>56    %23 = cir.cast int_to_ptr %22 : !u64i -> !cir.ptr<!u8i>57    // CHECK: %[[TMP2:[0-9]+]] = llvm.inttoptr %[[TMP]] : i64 to !llvm.ptr58    %24 = cir.cast ptr_to_int %23 : !cir.ptr<!u8i> -> !s32i59    // CHECK: %{{[0-9]+}} = llvm.ptrtoint %[[TMP2]] : !llvm.ptr to i3260    %29 = cir.cast ptr_to_bool %23 : !cir.ptr<!u8i> -> !cir.bool61 62    // Floating point casts.63    %25 = cir.cast int_to_float %arg1 : !s32i -> !cir.float64    // CHECK: %{{.+}} = llvm.sitofp %{{.+}} : i32 to f3265    %26 = cir.cast int_to_float %arg0 : !u32i -> !cir.float66    // CHECK: %{{.+}} = llvm.uitofp %{{.+}} : i32 to f3267    %27 = cir.cast float_to_int %arg2 : !cir.float -> !s32i68    // CHECK: %{{.+}} = llvm.fptosi %{{.+}} : f32 to i3269    %28 = cir.cast float_to_int %arg2 : !cir.float -> !u32i70    // CHECK: %{{.+}} = llvm.fptoui %{{.+}} : f32 to i3271    %18 = cir.const #cir.int<0> : !s32i72    // CHECK: %{{.+}} = llvm.fptrunc %{{.+}} : f64 to f3273    %34 = cir.cast floating %arg3 : !cir.double -> !cir.float74 75    cir.store %18, %2 : !s32i, !cir.ptr<!s32i>76    %19 = cir.load %2 : !cir.ptr<!s32i>, !s32i77    cir.return %19 : !s32i78  }79 80  cir.func @testBoolToIntCast(%arg0: !cir.bool)  {81  // CHECK: llvm.func @testBoolToIntCast82    %0 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["bl", init] {alignment = 1 : i64}83    %1 = cir.alloca !u8i, !cir.ptr<!u8i>, ["y", init] {alignment = 1 : i64}84    cir.store %arg0, %0 : !cir.bool, !cir.ptr<!cir.bool>85 86    %2 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool87    %3 = cir.cast bool_to_int %2 : !cir.bool -> !u8i88    // CHECK: %[[LOAD_BOOL:.*]] = llvm.load %{{.*}} : !llvm.ptr -> i889    // CHECK: %[[TRUNC:.*]] = llvm.trunc %[[LOAD_BOOL]] : i8 to i190    // CHECK: %[[EXT:.*]] = llvm.zext %[[TRUNC]] : i1 to i891 92    cir.store %3, %1 : !u8i, !cir.ptr<!u8i>93    cir.return94  }95}96