brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 888fb38 Raw
100 lines · plain
1// RUN: cir-opt %s -cir-to-llvm -o - | FileCheck %s -check-prefix=MLIR2// RUN: cir-translate %s -cir-to-llvmir --target x86_64-unknown-linux-gnu --disable-cc-lowering  | FileCheck %s -check-prefix=LLVM3!s32i = !cir.int<s, 32>4 5module {6  cir.func @foo(%arg0: !s32i) -> !s32i {7    %4 = cir.cast int_to_bool %arg0 : !s32i -> !cir.bool8    cir.if %4 {9      %5 = cir.const #cir.int<1> : !s32i10      cir.return %5 : !s32i11    } else {12      %5 = cir.const #cir.int<0> : !s32i13      cir.return %5 : !s32i14    }15    cir.return %arg0 : !s32i16  }17 18//      MLIR:   llvm.func @foo(%arg0: i32) -> i3219// MLIR-NEXT:     %0 = llvm.mlir.constant(0 : i32) : i3220// MLIR-NEXT:     %1 = llvm.icmp "ne" %arg0, %0 : i3221// MLIR-NEXT:     llvm.cond_br %1, ^bb1, ^bb222// MLIR-NEXT:   ^bb1:  // pred: ^bb023// MLIR-NEXT:     %2 = llvm.mlir.constant(1 : i32) : i3224// MLIR-NEXT:     llvm.return %2 : i3225// MLIR-NEXT:   ^bb2:  // pred: ^bb026// MLIR-NEXT:     %3 = llvm.mlir.constant(0 : i32) : i3227// MLIR-NEXT:     llvm.return %3 : i3228// MLIR-NEXT:   ^bb3:  // no predecessors29// MLIR-NEXT:     llvm.return %arg0 : i3230// MLIR-NEXT:   }31 32//       LLVM: define i32 @foo(i32 %0)33//  LLVM-NEXT:   %2 = icmp ne i32 %0, 034//  LLVM-NEXT:   br i1 %2, label %3, label %435// LLVM-EMPTY:36//  LLVM-NEXT: 3:37//  LLVM-NEXT:   ret i32 138// LLVM-EMPTY:39//  LLVM-NEXT: 4:40//  LLVM-NEXT:   ret i32 041// LLVM-EMPTY:42//  LLVM-NEXT: 5:43//  LLVM-NEXT:   ret i32 %044//  LLVM-NEXT: }45 46  cir.func @onlyIf(%arg0: !s32i) -> !s32i {47    %4 = cir.cast int_to_bool %arg0 : !s32i -> !cir.bool48    cir.if %4 {49      %5 = cir.const #cir.int<1> : !s32i50      cir.return %5 : !s32i51    }52    cir.return %arg0 : !s32i53  }54 55  //      MLIR: llvm.func @onlyIf(%arg0: i32) -> i3256  // MLIR-NEXT:   %0 = llvm.mlir.constant(0 : i32) : i3257  // MLIR-NEXT:   %1 = llvm.icmp "ne" %arg0, %0 : i3258  // MLIR-NEXT:   llvm.cond_br %1, ^bb1, ^bb259  // MLIR-NEXT: ^bb1:  // pred: ^bb060  // MLIR-NEXT:   %2 = llvm.mlir.constant(1 : i32) : i3261  // MLIR-NEXT:   llvm.return %2 : i3262  // MLIR-NEXT: ^bb2:  // pred: ^bb063  // MLIR-NEXT:   llvm.return %arg0 : i3264  // MLIR-NEXT: }65 66  // Verify empty if clause is properly lowered to empty block67  cir.func @emptyIfClause(%arg0: !s32i) -> !s32i {68    // MLIR-LABEL: llvm.func @emptyIfClause69    %4 = cir.cast int_to_bool %arg0 : !s32i -> !cir.bool70    // MLIR: llvm.cond_br {{%.*}}, ^[[T:.*]], ^[[PHI:.*]]71    cir.if %4 {72      // MLIR-NEXT: ^[[T]]:73      // MLIR-NEXT:   llvm.br ^[[PHI]]74    }75    // MLIR-NEXT: ^[[PHI]]:76    // MLIR-NEXT:   llvm.return77    cir.return %arg0 : !s32i78  }79 80  // Verify empty if-else clauses are properly lowered to empty blocks81  // TODO: Fix reversed order of blocks in the test once Issue clangir/#1094 is82  // addressed83  cir.func @emptyIfElseClause(%arg0: !s32i) -> !s32i {84    // MLIR-LABEL: llvm.func @emptyIfElseClause85    %4 = cir.cast int_to_bool %arg0 : !s32i -> !cir.bool86    // MLIR: llvm.cond_br {{%.*}}, ^[[T:.*]], ^[[F:.*]]87    cir.if %4 {88    // MLIR-NEXT: ^[[T]]:89    // MLIR-NEXT:   llvm.br ^[[PHI:.*]]90    } else {91    // MLIR-NEXT: ^[[F]]:92    // MLIR-NEXT:   llvm.br ^[[PHI]]93    }94    // MLIR-NEXT: ^[[PHI]]:95    // MLIR-NEXT:   llvm.return96    cir.return %arg0 : !s32i97  }98 99}100