brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 40df9ec Raw
62 lines · c
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -ftrapv %s -emit-llvm -o - | FileCheck %s2 3unsigned int ui, uj, uk;4int i, j, k;5 6// CHECK-LABEL: define{{.*}} void @test0()7void test0(void) {8  // -ftrapv doesn't affect unsigned arithmetic.9  // CHECK:      [[T1:%.*]] = load i32, ptr @uj10  // CHECK-NEXT: [[T2:%.*]] = load i32, ptr @uk11  // CHECK-NEXT: [[T3:%.*]] = add i32 [[T1]], [[T2]]12  // CHECK-NEXT: store i32 [[T3]], ptr @ui13  ui = uj + uk;14 15  // CHECK:      [[T1:%.*]] = load i32, ptr @j16  // CHECK-NEXT: [[T2:%.*]] = load i32, ptr @k17  // CHECK-NEXT: [[T3:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[T1]], i32 [[T2]])18  // CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T3]], 019  // CHECK-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T3]], 120  // CHECK-NEXT: [[T6:%.*]] = xor i1 [[T5]], true21  // CHECK-NEXT: br i1 [[T6]]22  // CHECK:      call void @llvm.ubsantrap(i8 0)23  i = j + k;24}25 26// CHECK-LABEL: define{{.*}} void @test1()27void test1(void) {28  extern void opaque(int);29  opaque(i++);30 31  // CHECK:      [[T1:%.*]] = load i32, ptr @i32  // CHECK-NEXT: [[T2:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[T1]], i32 1)33  // CHECK-NEXT: [[T3:%.*]] = extractvalue { i32, i1 } [[T2]], 034  // CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T2]], 135  // CHECK-NEXT: [[T5:%.*]] = xor i1 [[T4]], true36  // CHECK-NEXT: br i1 [[T5]]37  // CHECK:      call void @llvm.ubsantrap(i8 0)38}39 40// CHECK-LABEL: define{{.*}} void @test2()41void test2(void) {42  extern void opaque(int);43  opaque(++i);44 45  // CHECK:      [[T1:%.*]] = load i32, ptr @i46  // CHECK-NEXT: [[T2:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[T1]], i32 1)47  // CHECK-NEXT: [[T3:%.*]] = extractvalue { i32, i1 } [[T2]], 048  // CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T2]], 149  // CHECK-NEXT: [[T5:%.*]] = xor i1 [[T4]], true50  // CHECK-NEXT: br i1 [[T5]]51  // CHECK:      call void @llvm.ubsantrap(i8 0)52}53 54// CHECK-LABEL: define{{.*}} void @test3(55void test3(int a, int b, float c, float d) {56  // CHECK-NOT:  @llvm.trap57  (void)(a / b);58  (void)(a % b);59  (void)(c / d);60  // CHECK: }61}62