jhibbits added a comment. Hi vit,
I found what's going on with the "Cannot Select" error. divdc3.c contains code that gets lowered to a libcall. However this lowering doesn't go further to lower down to the legal operations permitted in this target. The debug snippet is: Legalizing: t38: f64 = fmaxnum t36, t37, /home/chmeee/freebsd/contrib/compiler-rt/ lib/builtins/divdc3.c:24:22 Op: t36: f64 = fabs t79, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins /divdc3.c:24:22 Op: t37: f64 = fabs t80, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins /divdc3.c:24:22 Trying to expand node Cannot expand node Trying to convert node to libcall Creating new node: t99: i64 = bitcast t36, /home/chmeee/freebsd/contrib/compiler-r t/lib/builtins/divdc3.c:24:22 Creating new node: t100: i32 = extract_element t99, Constant:i32<1>, /home/chmeee/ freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t101: i32 = extract_element t99, Constant:i32<0>, /home/chmeee/ freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t102: i64 = bitcast t37, /home/chmeee/freebsd/contrib/compiler- rt/lib/builtins/divdc3.c:24:22 Creating new node: t103: i32 = extract_element t102, Constant:i32<1>, /home/chmeee /freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t104: i32 = extract_element t102, Constant:i32<0>, /home/chmeee /freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t105: ch,glue = callseq_start t0, TargetConstant:i32<8>, Target Constant:i32<0>, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24 :22 Creating new node: t107: ch,glue = CopyToReg t105, Register:i32 $r3, t100, /home/c hmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t108: ch,glue = CopyToReg t107, Register:i32 $r4, t101, t107:1, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t110: ch,glue = CopyToReg t108, Register:i32 $r5, t103, t108:1, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t112: ch,glue = CopyToReg t110, Register:i32 $r6, t104, t110:1, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t114: ch,glue = PPCISD::CALL t112, TargetExternalSymbol:i32'fma x' [TF=1], Register:i32 $r3, Register:i32 $r4, Register:i32 $r5, Register:i32 $r6, RegisterMask:Untyped, t112:1, /home/chmeee/freebsd/contrib/compiler-rt/lib/builti ns/divdc3.c:24:22 Creating new node: t115: ch,glue = callseq_end t114, TargetConstant:i32<8>, Target Constant:i32<0>, t114:1, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/div dc3.c:24:22 Creating new node: t116: i32,ch,glue = CopyFromReg t115, Register:i32 $r3, t115:1, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t117: i32,ch,glue = CopyFromReg t116:1, Register:i32 $r4, t116: 2, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t118: i64 = build_pair t117, t116, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Creating new node: t119: f64 = bitcast t118, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Created libcall: t119: f64 = bitcast t118, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 Successfully converted node to libcall ... replacing: t38: f64 = fmaxnum t36, t37, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 with: t119: f64 = bitcast t118, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22 The last 3 lines are the key. It's converting the node to a bitcast libcall, which ends up yielding a 'f64 bitcast (i64 build_pair i32, i32)', instead of lowering further to 'f64 build_spe64 i32, i32'. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D49754/new/ https://reviews.llvm.org/D49754 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits