1; RUN: opt < %s -constprop -S | FileCheck %s 2 3; Overflow on a float to int or int to float conversion is undefined (PR21130). 4 5define i8 @overflow_fptosi() { 6; CHECK-LABEL: @overflow_fptosi( 7; CHECK-NEXT: ret i8 undef 8; 9 %i = fptosi double 1.56e+02 to i8 10 ret i8 %i 11} 12 13define i8 @overflow_fptoui() { 14; CHECK-LABEL: @overflow_fptoui( 15; CHECK-NEXT: ret i8 undef 16; 17 %i = fptoui double 2.56e+02 to i8 18 ret i8 %i 19} 20 21; The maximum float is approximately 2 ** 128 which is 3.4E38. 22; The constant below is 4E38. Use a 130 bit integer to hold that 23; number; 129-bits for the value + 1 bit for the sign. 24 25define float @overflow_uitofp() { 26; CHECK-LABEL: @overflow_uitofp( 27; CHECK-NEXT: ret float 0x7FF0000000000000 28; 29 %i = uitofp i130 400000000000000000000000000000000000000 to float 30 ret float %i 31} 32 33define float @overflow_sitofp() { 34; CHECK-LABEL: @overflow_sitofp( 35; CHECK-NEXT: ret float 0x7FF0000000000000 36; 37 %i = sitofp i130 400000000000000000000000000000000000000 to float 38 ret float %i 39} 40 41