blob: 7c63ff69246125bb10088e1cc3914884147df128 [file] [log] [blame]
Dale Johannesen20231482009-01-19 22:33:12 +00001; RUN: llvm-as < %s | opt -simplifycfg -instcombine | llvm-dis | grep 0x3FB99999A0000000 | count 2
2; RUN: llvm-as < %s | opt -simplifycfg -instcombine | llvm-dis | grep 0xBFB99999A0000000 | count 2
Dale Johannesen462be702009-01-19 21:17:05 +00003; check constant folding for 'frem'. PR 3316.
4
5; ModuleID = 'tt.c'
6target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
7target triple = "i386-apple-darwin9.6"
8
9define float @test1() nounwind {
10entry:
11 %retval = alloca float ; <float*> [#uses=2]
12 %0 = alloca float ; <float*> [#uses=2]
13 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
14 %1 = call double @fmod(double 1.000000e-01, double 1.000000e+00) nounwind readonly ; <double> [#uses=1]
15 %2 = fptrunc double %1 to float ; <float> [#uses=1]
16 store float %2, float* %0, align 4
17 %3 = load float* %0, align 4 ; <float> [#uses=1]
18 store float %3, float* %retval, align 4
19 br label %return
20
21return: ; preds = %entry
22 %retval1 = load float* %retval ; <float> [#uses=1]
23 ret float %retval1
24}
25
26declare double @fmod(double, double) nounwind readonly
27
28define float @test2() nounwind {
29entry:
30 %retval = alloca float ; <float*> [#uses=2]
31 %0 = alloca float ; <float*> [#uses=2]
32 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
33 %1 = call double @fmod(double -1.000000e-01, double 1.000000e+00) nounwind readonly ; <double> [#uses=1]
34 %2 = fptrunc double %1 to float ; <float> [#uses=1]
35 store float %2, float* %0, align 4
36 %3 = load float* %0, align 4 ; <float> [#uses=1]
37 store float %3, float* %retval, align 4
38 br label %return
39
40return: ; preds = %entry
41 %retval1 = load float* %retval ; <float> [#uses=1]
42 ret float %retval1
43}
44
45define float @test3() nounwind {
46entry:
47 %retval = alloca float ; <float*> [#uses=2]
48 %0 = alloca float ; <float*> [#uses=2]
49 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
50 %1 = call double @fmod(double 1.000000e-01, double -1.000000e+00) nounwind readonly ; <double> [#uses=1]
51 %2 = fptrunc double %1 to float ; <float> [#uses=1]
52 store float %2, float* %0, align 4
53 %3 = load float* %0, align 4 ; <float> [#uses=1]
54 store float %3, float* %retval, align 4
55 br label %return
56
57return: ; preds = %entry
58 %retval1 = load float* %retval ; <float> [#uses=1]
59 ret float %retval1
60}
61
62define float @test4() nounwind {
63entry:
64 %retval = alloca float ; <float*> [#uses=2]
65 %0 = alloca float ; <float*> [#uses=2]
66 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
67 %1 = call double @fmod(double -1.000000e-01, double -1.000000e+00) nounwind readonly ; <double> [#uses=1]
68 %2 = fptrunc double %1 to float ; <float> [#uses=1]
69 store float %2, float* %0, align 4
70 %3 = load float* %0, align 4 ; <float> [#uses=1]
71 store float %3, float* %retval, align 4
72 br label %return
73
74return: ; preds = %entry
75 %retval1 = load float* %retval ; <float> [#uses=1]
76 ret float %retval1
77}