brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 28fe33c Raw
128 lines · plain
1// RUN: tco %s | FileCheck %s2// RUN: %flang_fc1 -emit-llvm %s -o - | FileCheck %s3 4// Test peephole optimizations5 6// CHECK-LABEL: define i8 @test_trunc(7// CHECK-SAME: i256 %[[arg:.*]])8// CHECK-NEXT: = trunc i256 %[[arg]] to i89// CHECK-NEXT: ret i810func.func @test_trunc(%0 : i256) -> i8 {11  %1 = fir.convert %0 : (i256) -> i12812  %2 = fir.convert %1 : (i128) -> i6413  %3 = fir.convert %2 : (i64) -> i3214  %4 = fir.convert %3 : (i32) -> i1615  %5 = fir.convert %4 : (i16) -> i816  return %5 : i817}18 19// CHECK-LABEL: define i256 @test_sext(20// CHECK-SAME: i8 %[[arg:.*]])21// CHECK-NEXT: = sext i8 %[[arg]] to i25622// CHECK-NEXT: ret i25623func.func @test_sext(%0 : i8) -> i256 {24  %1 = fir.convert %0 : (i8) -> i1625  %2 = fir.convert %1 : (i16) -> i3226  %3 = fir.convert %2 : (i32) -> i6427  %4 = fir.convert %3 : (i64) -> i12828  %5 = fir.convert %4 : (i128) -> i25629  return %5 : i25630}31 32// CHECK-LABEL: define half @test_fptrunc(33// CHECK-SAME: fp128 %[[arg:.*]])34// CHECK-NEXT: %[[res:.*]] = fptrunc fp128 %[[arg]] to half35// CHECK-NEXT: ret half %[[res]]36func.func @test_fptrunc(%0 : f128) -> f16 {37  %2 = fir.convert %0 : (f128) -> f6438  %3 = fir.convert %2 : (f64) -> f3239  %4 = fir.convert %3 : (f32) -> f1640  return %4 : f1641}42 43// CHECK-LABEL: define x86_fp80 @test_fpext(44// CHECK-SAME: bfloat %[[arg:.*]])45// CHECK-NEXT: = fpext bfloat %[[arg]] to x86_fp8046// CHECK-NEXT: ret x86_fp8047func.func @test_fpext(%0 : bf16) -> f80 {48  %2 = fir.convert %0 : (bf16) -> f3249  %3 = fir.convert %2 : (f32) -> f6450  %4 = fir.convert %3 : (f64) -> f8051  return %4 : f8052}53 54// CHECK-LABEL: define i64 @test_ascending(55// CHECK-SAME: i8 %[[arg:.*]])56// CHECK-NEXT: = sext i8 %[[arg]] to i6457// CHECK-NEXT: ret i6458func.func @test_ascending(%0 : i8) -> index {59  %1 = fir.convert %0 : (i8) -> i1660  %2 = fir.convert %1 : (i16) -> i3261  %3 = fir.convert %2 : (i32) -> i6462  %5 = fir.convert %3 : (i64) -> index63  return %5 : index64}65 66// CHECK-LABEL: define i8 @test_descending(67// CHECK-SAME: i64 %[[arg:.*]])68// CHECK-NEXT: = trunc i64 %[[arg]] to i869// CHECK-NEXT: ret i870func.func @test_descending(%0 : index) -> i8 {71  %2 = fir.convert %0 : (index) -> i6472  %3 = fir.convert %2 : (i64) -> i3273  %4 = fir.convert %3 : (i32) -> i1674  %5 = fir.convert %4 : (i16) -> i875  return %5 : i876}77 78// CHECK-LABEL: define float @test_useless(79// CHECK-SAME: float %[[arg:.*]])80// CHECK-NEXT: ret float %[[arg]]81func.func @test_useless(%0 : f32) -> f32 {82  %1 = fir.convert %0 : (f32) -> f3283  return %1 : f3284}85 86// CHECK-LABEL: define float @test_useless_sext(87// CHECK-SAME: i32 %[[arg:.*]])88// CHECK-NEXT: %[[res:.*]] = sitofp i32 %[[arg]] to float89// CHECK-NEXT: ret float %[[res]]90func.func @test_useless_sext(%0 : i32) -> f32 {91  %1 = fir.convert %0 : (i32) -> i6492  %2 = fir.convert %1 : (i64) -> i3293  %3 = fir.convert %2 : (i32) -> f3294  return %3 : f3295}96 97// CHECK-LABEL: define i16 @test_hump(98// CHECK-SAME: i32 %[[arg:.*]])99// CHECK-NEXT: trunc i32 %[[arg]] to i16100// CHECK-NEXT: ret i16101func.func @test_hump(%0 : i32) -> i16 {102  %1 = fir.convert %0 : (i32) -> i64103  %2 = fir.convert %1 : (i64) -> i16104  return %2 : i16105}106 107// CHECK-LABEL: define i16 @test_slump(108// CHECK-SAME: i32 %[[arg:.*]])109// CHECK-NEXT: %[[i:.*]] = trunc i32 %[[arg]] to i8110// CHECK-NEXT: sext i8 %[[i]] to i16111// CHECK-NEXT: ret i16112func.func @test_slump(%0 : i32) -> i16 {113  %1 = fir.convert %0 : (i32) -> i8114  %2 = fir.convert %1 : (i8) -> i16115  return %2 : i16116}117 118// CHECK-LABEL: define i64 @test_slump2(119// CHECK-SAME: i64 %[[arg:.*]])120// CHECK-NEXT: %[[i:.*]] = trunc i64 %[[arg]] to i16121// CHECK-NEXT: sext i16 %[[i]] to i64122// CHECK-NEXT: ret i64123func.func @test_slump2(%0 : index) -> index {124  %1 = fir.convert %0 : (index) -> i16125  %2 = fir.convert %1 : (i16) -> index126  return %2 : index127}128